ASP.NET MVC 动态返回指定的HTTP状态码

以前在ASP.NET中,如果要响应指定的HTTP状态代码,都是使用HttpResponse.StatusCode属性进行操作。在ASP.NET MVC可以使用控制器HttpStatusCodeResult操作结果来返回指定的HTTP状态码。

文章中演示项目下载:ASP.NET MVC Dynamic Http Code.zip

ASP.NET MVC 动态操作HTTP响应状态代码演示截图

另外还有HttpNotFound和HttpUnauthorizedResult这两个操作结果可以返回404和401状态码,这两个类都是派生于HttpStatusCodeResult类,具体代码如下:

/// <summary>
/// 返回指定的HTTP状态代码
/// </summary>
/// <returns></returns>
public ActionResult ResponseAssignHttpCode(int statusCode=500)
{
    return new HttpStatusCodeResult(statusCode);            
}
/// <summary>
/// 返回HTTP 404响应代码
/// </summary>
/// <returns></returns>
public ActionResult Response404HttpCode()
{
    return HttpNotFound();            
}
/// <summary>
/// 返回HTTP 401响应代码
/// </summary>
/// <returns></returns>
public ActionResult Response401HttpCode()
{
    return new HttpUnauthorizedResult();
}

有兴趣的朋友可以研究下这几个操作结果的源码:

  • HttpStatusCodeResult.cs
  • HttpUnauthorizedResult.cs
  • HttpNotFoundResult.cs

从源码中可以看出,HttpNotFoundResult和HttpUnauthorizedResult都是继承于HttpStatusCodeResult这个操作结果类:

HttpNotFoundResult源码截图,返回HTTP 404 操作结果

HttpUnauthorizedResult源码截图,返回HTTP 401 状态码

至于HttpStatusCodeResult的跳转原理,就是通过设置HttpContext.Response.StatusCode属性来对HTTP响应的状态代码进行操作:

public override void ExecuteResult(ControllerContext context)
{
    if (context == null)
    {
        throw new ArgumentNullException("context");
    }

    context.HttpContext.Response.StatusCode = StatusCode;
    if (StatusDescription != null)
    {
        context.HttpContext.Response.StatusDescription = StatusDescription;
    }
}

以往ASP.NET一般是直接操作HttpResponse.StatusCode属性来动态控制HTTP状态,只能说万变不离其宗吧。

 




原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98692.html

(0)
上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐

发表回复

登录后才能评论