以前在ASP.NET中,如果要响应指定的HTTP状态代码,都是使用HttpResponse.StatusCode属性进行操作。在ASP.NET MVC可以使用控制器HttpStatusCodeResult操作结果来返回指定的HTTP状态码。
文章中演示项目下载:ASP.NET MVC Dynamic Http Code.zip
另外还有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();
}
有兴趣的朋友可以研究下这几个操作结果的源码:
从源码中可以看出,HttpNotFoundResult和HttpUnauthorizedResult都是继承于HttpStatusCodeResult这个操作结果类:
至于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状态,只能说万变不离其宗吧。
作者:十有三
出处:https://shiyousan.com/post/635712747002560766
版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。