我有一个 ASP.NET MVC 网站,我想添加一个小的管理页面。我遇到的问题是我将全面部署它,并且我将无法使用 SSL。我可以要求管理员远程桌面并使用本地浏览器执行管理。
这可以做到吗?<customeErrors mode="RemoteOnly" />
除了我的管理页面外,我基本上希望获得相同的行为。我可以通过 web.config 做到这一点吗?
我有一个 ASP.NET MVC 网站,我想添加一个小的管理页面。我遇到的问题是我将全面部署它,并且我将无法使用 SSL。我可以要求管理员远程桌面并使用本地浏览器执行管理。
这可以做到吗?<customeErrors mode="RemoteOnly" />
除了我的管理页面外,我基本上希望获得相同的行为。我可以通过 web.config 做到这一点吗?
Request.IsLocal
是你的朋友。
http://msdn.microsoft.com/en-us/library/system.web.httprequest.islocal.aspx
您可以使用它来检查请求是否来自本地计算机。
自定义属性
然后,您可以将其扩展为自定义属性,但这可能有点矫枉过正。如果这是您选择的路线,这是一个很好的例子,可以做类似的事情:
MVC3 及更高版本允许您在控制器级别设置属性,而不是方法,因此您可以锁定对负责管理页面的整个控制器的访问。
我通过编写自定义属性来做到这一点,如下所示:
public class IsLocalAttribute : AuthorizeAttribute
{
public bool ThrowSecurityException { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isLocal = httpContext.Request.IsLocal;
if (!isLocal && ThrowSecurityException)
throw new SecurityException();
return isLocal;
}
}
整个控制器的基本用法:
[IsLocal]
public class LocalOnlyController : Controller
{
public ActionResult Index()
{
return View();
}
}
或在特定方法上:
public class SomeController : Controller
{
[IsLocal]
public ActionResult LocalOnlyMethod()
{
return View();
}
}
如果要抛出安全异常而不是 302 重定向:
public class SomeController : Controller
{
[IsLocal(ThrowSecurityException = true)]
public ActionResult LocalOnlyMethod()
{
return View();
}
}