Web api 和 Mvc Razor 中的 Dotnet Core 错误处理

在我的 Web 应用程序中,我有 Web API 和普通的 MVC,我为 httpResponse 创建了一个扩展


 public static void ShowApplicationError(this HttpResponse response, string exceptionMessage,string innerException)

    {

        var result = JsonConvert.SerializeObject(new { error = exceptionMessage ,detail=innerException });

        response.HttpContext.Response.WriteAsync(result);

    }

并在 startup.cs 中用于异常处理。


app.UseExceptionHandler(builder =>

            {

                builder.Run(async context =>

                {

                    context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

                    var error = context.Features.Get<IExceptionHandlerFeature>();

                    if (error != null)

                    {

                        context.Response.ShowApplicationError(error.Error.Message, error.Error.InnerException.Message);

                    }

                });

            });

像这样。它对两者都很好。我想区分每个请求的错误。我不想显示 mvc 的 json 错误结束我该怎么做。


大话西游666
浏览 134回答 3
3回答

繁星coding

这种情况的最佳解决方案是更好地分离您的关注点。使您的 api 成为与您的 MVC 应用程序分开的 csproj。它还将为您提供以后部署的灵活性。如果这是现有代码而不是新代码,我会游说将其重构为单独的 api 项目。

慕尼黑8549860

您无法直接将内部服务器错误与 MVC 或 Web api 区分开来Error.Message。对于MVCand Web api,它们都继承自Controlleror ControllerBase。一般来说,我们通过添加api到 web api 的路由路径来区分它们。我建议您通过不带 api 路由的 mvc 和带 api 路由的 web api 来设计您的项目。然后检查路径ExceptionHandlerFeature.Path。app.UseExceptionHandler(builder =>{&nbsp; &nbsp; builder.Run(async context =>&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;&nbsp; &nbsp; &nbsp; &nbsp; var error = context.Features.Get<IExceptionHandlerFeature>();&nbsp; &nbsp; &nbsp; &nbsp; var error1 = context.Features.Get<IExceptionHandlerFeature>() as ExceptionHandlerFeature;&nbsp; &nbsp; &nbsp; &nbsp; var error2 = context.Features.Get<IExceptionHandlerPathFeature>();&nbsp; &nbsp; &nbsp; &nbsp; var requestPath = error2.Path;&nbsp; &nbsp; &nbsp; &nbsp; if (error != null)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.Response.ShowApplicationError(error.Error.Message, error.Error.InnerException.Message);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });});

青春有我

HttpRequest 中的 ContentType 和 Accept Header 区分输出类型,这在您的情况下就足够了。您可以使用 Accept Header 进行检查。if (context.Request.Headers["Accept"] == "application/json" || context.Request.Headers["Accept"] == "application/xml"){&nbsp; &nbsp; //Api Request}else{&nbsp; &nbsp; //other request.}
打开App,查看更多内容
随时随地看视频慕课网APP