爱上MVC~为非法进行Action的用户提供HttpStatusCodeResult
对一MVC来说,它有Controller和Action,其中Action用来为页面提供数据和相关逻辑,并最后将页面渲染出来,而有些action是需要一些参数的,如文章的最终页,可能需要一个ID,而这个ID通常是和某个链接集成在一起的,不需要浏览者手动在URL上改,而有些被称为无聊的用户或者马虎的程序员就把ID参数忽略了,这时,我们的action一般是直接抛出Exception,而这对于一个页面来说,并不是很优雅,对于一个WEB请求,应该返回一个HttpStatusCodeResult的状态结果,这个对象在WebApi中使用的比较频繁.
HttpStatusCodeResult对象结构如下
// 摘要:
// 提供一种用于返回带特定 HTTP 响应状态代码和说明的操作结果的方法。
public class HttpStatusCodeResult : ActionResult
{
// 摘要:
// 使用状态代码初始化 System.Web.Mvc.HttpStatusCodeResult 类的新实例。
//
// 参数:
// statusCode:
// 状态代码。
public HttpStatusCodeResult(HttpStatusCode statusCode);
//
// 摘要:
// 使用状态代码初始化 System.Web.Mvc.HttpStatusCodeResult 类的新实例。
//
// 参数:
// statusCode:
// 状态代码。
public HttpStatusCodeResult(int statusCode);
//
// 摘要:
// 使用状态代码和状态说明初始化 System.Web.Mvc.HttpStatusCodeResult 类的新实例。
//
// 参数:
// statusCode:
// 状态代码。
//
// statusDescription:
// 状态说明。
public HttpStatusCodeResult(HttpStatusCode statusCode, string statusDescription);
//
// 摘要:
// 使用状态代码和状态说明初始化 System.Web.Mvc.HttpStatusCodeResult 类的新实例。
//
// 参数:
// statusCode:
// 状态代码。
//
// statusDescription:
// 状态说明。
public HttpStatusCodeResult(int statusCode, string statusDescription); // 摘要:
// 获取 HTTP 状态代码。
//
// 返回结果:
// HTTP 状态代码。
public int StatusCode { get; }
//
// 摘要:
// 获取 HTTP 状态说明。
//
// 返回结果:
// HTTP 状态说明。
public string StatusDescription { get; } // 摘要:
// 通过从 System.Web.Mvc.ActionResult 类继承的自定义类型,启用对操作方法结果的处理。
//
// 参数:
// context:
// 用于执行结果的上下文。上下文信息包括控制器、HTTP 内容、请求上下文和路由数据。
public override void ExecuteResult(ControllerContext context);
}
HttpStatusCode是一个枚举类型,我们经常见到了404,500等HTTP请求码,都可以在这里枚举里找到
// 摘要:
// 包含为 HTTP 定义的状态代码的值。
public enum HttpStatusCode
{
// 摘要:
// 等效于 HTTP 状态 100。 System.Net.HttpStatusCode.Continue 指示客户端可能继续其请求。
Continue = ,
//
// 摘要:
// 等效于 HTTP 状态 101。 System.Net.HttpStatusCode.SwitchingProtocols 指示正在更改协议版本或协议。
SwitchingProtocols = ,
//
// 摘要:
// 等效于 HTTP 状态 200。 System.Net.HttpStatusCode.OK 指示请求成功,且请求的信息包含在响应中。 这是最常接收的状态代码。
OK = ,
//
// 摘要:
// 等效于 HTTP 状态 201。 System.Net.HttpStatusCode.Created 指示请求导致在响应被发送前创建新资源。
Created = ,
//
// 摘要:
// 等效于 HTTP 状态 202。 System.Net.HttpStatusCode.Accepted 指示请求已被接受做进一步处理。
Accepted = ,
//
// 摘要:
// 等效于 HTTP 状态 203。 System.Net.HttpStatusCode.NonAuthoritativeInformation 指示返回的元信息来自缓存副本而不是原始服务器,因此可能不正确。
NonAuthoritativeInformation = ,
//
// 摘要:
// 等效于 HTTP 状态 204。 System.Net.HttpStatusCode.NoContent 指示已成功处理请求并且响应已被设定为无内容。
NoContent = ,
//
// 摘要:
// 等效于 HTTP 状态 205。 System.Net.HttpStatusCode.ResetContent 指示客户端应重置(或重新加载)当前资源。
ResetContent = ,
//
// 摘要:
// 等效于 HTTP 状态 206。 System.Net.HttpStatusCode.PartialContent 指示响应是包括字节范围的 GET
// 请求所请求的部分响应。
PartialContent = ,
//
// 摘要:
// 等效于 HTTP 状态 300。 System.Net.HttpStatusCode.MultipleChoices 指示请求的信息有多种表示形式。
// 默认操作是将此状态视为重定向,并遵循与此响应关联的 Location 标头的内容。
MultipleChoices = ,
//
// 摘要:
// 等效于 HTTP 状态 300。 System.Net.HttpStatusCode.Ambiguous 指示请求的信息有多种表示形式。 默认操作是将此状态视为重定向,并遵循与此响应关联的
// Location 标头的内容。
Ambiguous = ,
//
// 摘要:
// 等效于 HTTP 状态 301。 System.Net.HttpStatusCode.MovedPermanently 指示请求的信息已移到 Location
// 头中指定的 URI 处。 接收到此状态时的默认操作为遵循与响应关联的 Location 头。
MovedPermanently = ,
//
// 摘要:
// 等效于 HTTP 状态 301。 System.Net.HttpStatusCode.Moved 指示请求的信息已移到 Location 头中指定的
// URI 处。 接收到此状态时的默认操作为遵循与响应关联的 Location 头。 原始请求方法为 POST 时,重定向的请求将使用 GET 方法。
Moved = ,
//
// 摘要:
// 等效于 HTTP 状态 302。 System.Net.HttpStatusCode.Found 指示请求的信息位于 Location 头中指定的
// URI 处。 接收到此状态时的默认操作为遵循与响应关联的 Location 头。 原始请求方法为 POST 时,重定向的请求将使用 GET 方法。
Found = ,
//
// 摘要:
// 等效于 HTTP 状态 302。 System.Net.HttpStatusCode.Redirect 指示请求的信息位于 Location 头中指定的
// URI 处。 接收到此状态时的默认操作为遵循与响应关联的 Location 头。 原始请求方法为 POST 时,重定向的请求将使用 GET 方法。
Redirect = ,
//
// 摘要:
// 等效于 HTTP 状态 303。 作为 POST 的结果,System.Net.HttpStatusCode.SeeOther 将客户端自动重定向到
// Location 头中指定的 URI。 用 GET 生成对 Location 标头所指定的资源的请求。
SeeOther = ,
//
// 摘要:
// 等效于 HTTP 状态 303。 作为 POST 的结果,System.Net.HttpStatusCode.RedirectMethod 将客户端自动重定向到
// Location 头中指定的 URI。 用 GET 生成对 Location 标头所指定的资源的请求。
RedirectMethod = ,
//
// 摘要:
// 等效于 HTTP 状态 304。 System.Net.HttpStatusCode.NotModified 指示客户端的缓存副本是最新的。 未传输此资源的内容。
NotModified = ,
//
// 摘要:
// 等效于 HTTP 状态 305。 System.Net.HttpStatusCode.UseProxy 指示请求应使用位于 Location 头中指定的
// URI 的代理服务器。
UseProxy = ,
//
// 摘要:
// 等效于 HTTP 状态 306。 System.Net.HttpStatusCode.Unused 是未完全指定的 HTTP/1.1 规范的建议扩展。
Unused = ,
//
// 摘要:
// 等效于 HTTP 状态 307。 System.Net.HttpStatusCode.RedirectKeepVerb 指示请求信息位于 Location
// 头中指定的 URI 处。 接收到此状态时的默认操作为遵循与响应关联的 Location 头。 原始请求方法为 POST 时,重定向的请求还将使用
// POST 方法。
RedirectKeepVerb = ,
//
// 摘要:
// 等效于 HTTP 状态 307。 System.Net.HttpStatusCode.TemporaryRedirect 指示请求信息位于 Location
// 头中指定的 URI 处。 接收到此状态时的默认操作为遵循与响应关联的 Location 头。 原始请求方法为 POST 时,重定向的请求还将使用
// POST 方法。
TemporaryRedirect = ,
//
// 摘要:
// 等效于 HTTP 状态 400。 System.Net.HttpStatusCode.BadRequest 指示服务器未能识别请求。 如果没有其他适用的错误,或者不知道准确的错误或错误没有自己的错误代码,则发送
// System.Net.HttpStatusCode.BadRequest。
BadRequest = ,
//
// 摘要:
// 等效于 HTTP 状态 401。 System.Net.HttpStatusCode.Unauthorized 指示请求的资源要求身份验证。 WWW-Authenticate
// 头包含如何执行身份验证的详细信息。
Unauthorized = ,
//
// 摘要:
// 等效于 HTTP 状态 402。 保留 System.Net.HttpStatusCode.PaymentRequired 以供将来使用。
PaymentRequired = ,
//
// 摘要:
// 等效于 HTTP 状态 403。 System.Net.HttpStatusCode.Forbidden 指示服务器拒绝满足请求。
Forbidden = ,
//
// 摘要:
// 等效于 HTTP 状态 404。 System.Net.HttpStatusCode.NotFound 指示请求的资源不在服务器上。
NotFound = ,
//
// 摘要:
// 等效于 HTTP 状态 405。 System.Net.HttpStatusCode.MethodNotAllowed 指示请求的资源上不允许请求方法(POST
// 或 GET)。
MethodNotAllowed = ,
//
// 摘要:
// 等效于 HTTP 状态 406。 System.Net.HttpStatusCode.NotAcceptable 指示客户端已用 Accept 头指示将不接受资源的任何可用表示形式。
NotAcceptable = ,
//
// 摘要:
// 等效于 HTTP 状态 407。 System.Net.HttpStatusCode.ProxyAuthenticationRequired 指示请求的代理要求身份验证。
// Proxy-authenticate 头包含如何执行身份验证的详细信息。
ProxyAuthenticationRequired = ,
//
// 摘要:
// 等效于 HTTP 状态 408。 System.Net.HttpStatusCode.RequestTimeout 指示客户端没有在服务器期望请求的时间内发送请求。
RequestTimeout = ,
//
// 摘要:
// 等效于 HTTP 状态 409。 System.Net.HttpStatusCode.Conflict 指示由于服务器上的冲突而未能执行请求。
Conflict = ,
//
// 摘要:
// 等效于 HTTP 状态 410。 System.Net.HttpStatusCode.Gone 指示请求的资源不再可用。
Gone = ,
//
// 摘要:
// 等效于 HTTP 状态 411。 System.Net.HttpStatusCode.LengthRequired 指示缺少必需的 Content-length
// 头。
LengthRequired = ,
//
// 摘要:
// 等效于 HTTP 状态 412。 System.Net.HttpStatusCode.PreconditionFailed 指示为此请求设置的条件失败,且无法执行此请求。
// 条件是用条件请求标头(如 If-Match、If-None-Match 或 If-Unmodified-Since)设置的。
PreconditionFailed = ,
//
// 摘要:
// 等效于 HTTP 状态 413。 System.Net.HttpStatusCode.RequestEntityTooLarge 指示请求太大,服务器无法处理。
RequestEntityTooLarge = ,
//
// 摘要:
// 等效于 HTTP 状态 414。 System.Net.HttpStatusCode.RequestUriTooLong 指示 URI 太长。
RequestUriTooLong = ,
//
// 摘要:
// 等效于 HTTP 状态 415。 System.Net.HttpStatusCode.UnsupportedMediaType 指示请求是不支持的类型。
UnsupportedMediaType = ,
//
// 摘要:
// 等效于 HTTP 状态 416。 System.Net.HttpStatusCode.RequestedRangeNotSatisfiable 指示无法返回从资源请求的数据范围,因为范围的开头在资源的开头之前,或因为范围的结尾在资源的结尾之后。
RequestedRangeNotSatisfiable = ,
//
// 摘要:
// 等效于 HTTP 状态 417。 System.Net.HttpStatusCode.ExpectationFailed 指示服务器未能符合 Expect
// 头中给定的预期值。
ExpectationFailed = ,
//
UpgradeRequired = ,
//
// 摘要:
// 等效于 HTTP 状态 500。 System.Net.HttpStatusCode.InternalServerError 指示服务器上发生了一般错误。
InternalServerError = ,
//
// 摘要:
// 等效于 HTTP 状态 501。 System.Net.HttpStatusCode.NotImplemented 指示服务器不支持请求的函数。
NotImplemented = ,
//
// 摘要:
// 等效于 HTTP 状态 502。 System.Net.HttpStatusCode.BadGateway 指示中间代理服务器从另一代理或原始服务器接收到错误响应。
BadGateway = ,
//
// 摘要:
// 等效于 HTTP 状态 503。 System.Net.HttpStatusCode.ServiceUnavailable 指示服务器暂时不可用,通常是由于过多加载或维护。
ServiceUnavailable = ,
//
// 摘要:
// 等效于 HTTP 状态 504。 System.Net.HttpStatusCode.GatewayTimeout 指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。
GatewayTimeout = ,
//
// 摘要:
// 等效于 HTTP 状态 505。 System.Net.HttpStatusCode.HttpVersionNotSupported 指示服务器不支持请求的
// HTTP 版本。
HttpVersionNotSupported = ,
}
让我们在Action中使用它,看一下程序修改后的样式吧
public ActionResult Details(int? id)
{
//参数不正确,直接抛出对应的HttpStatusCodeResult结果
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
} //你的逻辑
return View();
}
结果截图
aaarticlea/png;base64,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" alt="" />
在进行MVC4之后,它同样支持异步Action,即它在独立的线程中运行,而不会使用主WEB线程阻塞
public async Task<ActionResult> Details(int? id)
{
//参数不正确,直接抛出对应的HttpStatusCodeResult结果
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
} //你的逻辑
return View();
}
对于MVC的研究,我们还在继续,等待MVC5的带来!
爱上MVC~为非法进行Action的用户提供HttpStatusCodeResult的更多相关文章
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理
系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...
- asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别
转载自 : <asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别> 先复制过来 ...
- [转]ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器.Action过滤器是自定义的Attributes,用来标记添 ...
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/09/1307660.html 有时候你想在调用action方法之前或者action方法之后处 ...
- ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据
在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_five.html 系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会 ...
- 爱上MVC3~在控制器或Action上动态设定模板页(Layout)
回到目录 很多境况下,我们需要设置自己模块的layout,即它的布局页面,在MVC2中叫它模板页面,你可以在return view方法时设置它,当然,这不是一种好方法,因为我不想每个action都去设 ...
- Asp.Net Mvc - 在OnResultExecut* 拦截Action返回的HTML
在Asp.Net MVC项目中通过重写ActionFilterAttribute中的方法,我们就可以在轻松的在Action方法执行前后做一些特殊的操作如:[身份认证.日志记录.内容截取等]. 但是我们 ...
- ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost
我们知道ASP.NET Core MVC中Controller的Action上可以声明HttpGet和HttpPost特性标签,来限制可以访问Action的Http请求类型(GET.POST等). 那 ...
随机推荐
- 编译 wxWidgets-3.0.2 on Mac OS X Yosemite 出错?!的解决方法
tar -zxf wxWidgets-3.0.2.tar.bz2 //解压 //三部走 ./configure ./make 提示webKit出错 原因:有人偷懒,没试编译就发布了. 解决:找到. ...
- JavaScript-在当前显示区范围内实现点不到的小方块
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- php压缩文件
$filename = './qrcode.zip'; // 最终生成的文件名(含路径) //生成文件 $zip = new ZipArchive (); // 使用本类,linux需开启zlib,w ...
- python 版本升级(CentOS) 从2.6.6升级到2.7.6
安装必须的包 yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readli ...
- flex进行页面的基础布局
接触flex有一段时间了,由于自己在移动上的经验比较少,一直以为这个和css3的其他属性差不多,就是一个盒模型的缩放之类的.今天一个移动的小项目用到了这个属性,仔细看了下,先不说里面具体的属性,就fl ...
- 谁动了我的特征?——sklearn特征转换行为全记录
目录 1 为什么要记录特征转换行为?2 有哪些特征转换的方式?3 特征转换的组合4 sklearn源码分析 4.1 一对一映射 4.2 一对多映射 4.3 多对多映射5 实践6 总结7 参考资料 1 ...
- 【转载】Bandits for Recommendation Systems (Part I)
[原文链接:http://engineering.richrelevance.com/bandits-recommendation-systems/.] [本文链接:http://www.cnblog ...
- 使用getopt()处理命令行参数
假设有一程序 testopt,其命令行选项参数有: -i 选项 -l 选项 -r 选项 -n <值> 带关联值的选项 则处理 ...
- 未注册wang域名批量查询工具
一.支持规则查询 可自定义生成域名进行查询,可生成任意位数的字母数字域名,根据[声母].[韵母]生成单拼,双拼,三拼等域名,还可根据字典生成,支持全拼.首拼识别,全国城市区号.城市全拼.城市首拼.热门 ...
- SAP HANA专题分析目录
针对HANA的关键技术领域, 做深度解析. 1. HANA开发规范 HANA 各种对象的应用解析.版本管理,开发规范. 2. HANA系统管理 用户.系统权限.数据权限的深度解析. HANA系统配置. ...