为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
大话西游666 2022-06-18 17:27:15
在我的 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 错误结束我该怎么做。
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

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



查看完整回答
反对 回复 2022-06-18
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

您无法直接将内部服务器错误与 MVC 或 Web api 区分开来Error.Message。对于MVCand Web api,它们都继承自Controlleror ControllerBase。


一般来说,我们通过添加api到 web api 的路由路径来区分它们。我建议您通过不带 api 路由的 mvc 和带 api 路由的 web api 来设计您的项目。然后检查路径ExceptionHandlerFeature.Path。


app.UseExceptionHandler(builder =>

{

    builder.Run(async context =>

    {

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

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

        var error1 = context.Features.Get<IExceptionHandlerFeature>() as ExceptionHandlerFeature;

        var error2 = context.Features.Get<IExceptionHandlerPathFeature>();

        var requestPath = error2.Path;

        if (error != null)

        {

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

        }

    });

});


查看完整回答
反对 回复 2022-06-18
?
青春有我

TA贡献1784条经验 获得超8个赞

HttpRequest 中的 ContentType 和 Accept Header 区分输出类型,这在您的情况下就足够了。


您可以使用 Accept Header 进行检查。


if (context.Request.Headers["Accept"] == "application/json" || context.Request.Headers["Accept"] == "application/xml")

{

    //Api Request

}

else

{

    //other request.

}


查看完整回答
反对 回复 2022-06-18
  • 3 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信