Ale*_*lex 28 iis debugging asp.net-mvc ssl localhost
我希望我的登录页面只是SSL:
[RequireHttps]
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
但显然,当我开发和调试我的应用程序时,它无法在localhost上运行.我不想将IIS 7与SSL证书一起使用,如何自动禁用RequireHttps属性?
更新
基于StackOverflow用户和ASP.NET MVC 2源代码提供的信息,我创建了以下类来解决问题.
public class RequireSSLAttribute : FilterAttribute, IAuthorizationFilter
{
public virtual void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!filterContext.HttpContext.Request.IsSecureConnection)
{
HandleNonHttpsRequest(filterContext);
}
}
protected virtual void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.Url.Host.Contains("localhost")) return;
if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("The requested resource can only be accessed via SSL");
}
string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectResult(url);
}
}
Run Code Online (Sandbox Code Playgroud)
它的使用方式如下:
[RequireSSL]
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
Cha*_*hao 26
最简单的方法是从RequireHttps派生一个新属性并覆盖HandleNonHttpsRequest
protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.Request.Url.Host.Contains("localhost"))
{
base.HandleNonHttpsRequest(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
HandleNonHttpsRequest是抛出异常的方法,如果主机是localhost,我们所做的就是不调用它(正如杰夫在他的评论中所说,你可以将它扩展到测试环境或实际上你想要的任何其他异常).
小智 19
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
if (!HttpContext.Current.IsDebuggingEnabled) {
filters.Add(new RequireHttpsAttribute());
}
}
Run Code Online (Sandbox Code Playgroud)
Fem*_*ref 14
#if (!DEBUG)
[RequireHttps]
#endif
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
您可以将此要求封装在派生属性中:
class RequireHttpsNonDebugAttribute : RequireHttpsAttribute {
public override void HandleNonHttpsRequest(AuthorizationContext ctx) {
#if (!DEBUG)
base.HandleNonHttpsRequest(ctx);
#endif
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10774 次 |
| 最近记录: |