我看到MVC.NET的第2版现在有一个RequireHttps属性,这对我很有用.然而,什么是关闭效果的好策略?例如,我想在某些页面上使用Https,但在其他页面上使用常规Http.我应该创建自己的RequireHttp属性吗?
编辑:我使用自己的RequireHttp属性,它工作正常,但我想知道在MVC.NET版本2中是否有一些我缺少的内置功能.
编辑2:我一定不清楚.我的问题涉及以下内容:如果您使用RequireHttps,那么之后的任何请求都将超过Https,即使Controller或Action未使用RequireHttps进行修饰.除非我弄错了,否则你需要第二个属性,例如RequireHttp,将请求重定向到Http而不是Https.
关键ActionFilterAttribute是你可以将它们应用于你想要的任何动作.或者换句话说,您不必将它们应用于所有操作.
如果您不希望将属性的逻辑注入到操作中,则只需将该属性应用于该操作即可.例如 :
public class SomeController : Controller {
[RequireHttps]
public ActionResult SomeAction() {
//the attribute's logic will be injected to this action.
return View();
}
public ActionResult SomeOtherAction() {
//this action doesn't require https protocol
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
如果将该属性应用于控制器本身,则它将应用于控制器中的所有操作.
编辑:
要求http协议而不是https,我想你可以使用下面的属性.我会仔细检查MVC 2是否已经有了这个.但如果没有(它没有):
public class RequireHttp : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (filterContext.HttpContext.Request.IsSecureConnection) {
UriBuilder builder = new UriBuilder() {
Scheme = "http",
Host = filterContext.HttpContext.Request.Url.Host,
Path = filterContext.HttpContext.Request.RawUrl
};
filterContext.Result = new RedirectResult(builder.ToString());
filterContext.Result.ExecuteResult(filterContext);
}
base.OnActionExecuting(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |