ASP.NET API中Http状态代码的自定义异常 [英] Custom exceptions to Http status codes in ASP.NET API

查看:280
本文介绍了ASP.NET API中Http状态代码的自定义异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在业务层中有几个自定义异常,这些异常会在我的ASP.NET应用程序中冒充到我的API方法。

I have a couple of custom exceptions in my business layer that bubble up to my API methods in my ASP.NET application.

当前,它们都转换为Http状态500。如何映射这些自定义异常,以便可以返回不同的Http状态代码?

Currently, they all translate to Http status 500. How do I map these custom exceptions so that I could return different Http status codes?

推荐答案

使用< a href = https://msdn.microsoft.com/zh-cn/library/system.web.httpresponse.statuscode.aspx rel = noreferrer> Response.StatusCode 设置和获取方法。

本地异常处理:对于本地操作异常处理,请将以下内容放入调用代码中。

Local Exception handling: For local action exception handling, put the following inside the calling code.

var responseCode = Response.StatusCode;
try
{
    // Exception was called
}
catch (BusinessLayerException1)
{
    responseCode = 201
}
catch (BusinessLayerException2)
{
    responseCode = 202
}
Response.StatusCode = responseCode;

关于跨控制器行为:您应遵循以下步骤。


  1. 创建抽象BaseController

  2. 使您当前的Controller继承自BaseController。

  3. 在BaseController中添加以下逻辑。

BaseController.cs

public abstract class BaseController : Controller
{
    protected override void OnException(ExceptionContext filterContext)
    {
        var responseCode = Response.StatusCode;
        var exception = filterContext.Exception;
        switch (exception.GetType().ToString())
        {
            case "ArgumentNullException":
                responseCode = 601;
                break;

            case "InvalidCastException":
                responseCode = 602;
                break;
        }
        Response.StatusCode = responseCode;
        base.OnException(filterContext);
    }
}

注意:
您还可以添加已处理的异常并将其重定向到其他 Controller / Action

filterContext.ExceptionHandled = true;
filterContext.Result = this.RedirectToAction("Index", "Error");

有关ASP.NET MVC的更多信息,可以找到此处

这篇关于ASP.NET API中Http状态代码的自定义异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆