簡體   English   中英

使用 ABP 框架自定義 API 響應 HTTP 狀態代碼

[英]Custom API response HTTP status codes with ABP Framework

有沒有辦法使用 ASP.NET Boilerplate 返回自定義 HTTP 狀態代碼(如 4xx)?

我想在驗證上下文中設置自定義應用程序特定的 HTTP 代碼以添加更多粒度。 目前,ABP 將為所有驗證錯誤設置 200(OK)。

在 ABP 源代碼中,可以看到如下幾個地方,其中Response.StatusCode由框架設置,如下所示:

    private void HandleAndWrapException(ExceptionContext context)
    {
        if (!ActionResultHelper.IsObjectResult(context.ActionDescriptor.GetMethodInfo().ReturnType))
        {
            return;
        }

        context.HttpContext.Response.Clear();
        context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        context.Result = new ObjectResult(
            new AjaxResponse(
                _errorInfoBuilder.BuildForException(context.Exception),
                context.Exception is AbpAuthorizationException
            )
        );

        context.Exception = null; //Handled!
    }

我最終做的是完全替換 ABP 異常過濾器。 在我的自定義過濾器中,我可以設置我需要的任何狀態代碼。

var filters = Configuration.Modules.AbpWebApi().HttpConfiguration.Filters;
var currentExceptionFilter = filters
    .First(h => h.Instance is AbpExceptionFilterAttribute).Instance;

filters.Remove(currentExceptionFilter );
filters.Add(IocManager.Resolve<MyApiExceptionFilter>());

您還可以使用UserFriendlyException我們允許您傳遞響應代碼。 示例: throw new UserFriendlyException (302, "Redirecting...");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM