我要求在https和rest上运行选择性操作方法,应该在https上执行。
为实现这一目标,我创建了自定义属性并设置了操作。
public class RequiresSSL : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase req = filterContext.HttpContext.Request;
HttpResponseBase res = filterContext.HttpContext.Response;
//Check if we're secure or not and if we're on the local box
if (!req.IsSecureConnection && !req.IsLocal)
{
var builder = new UriBuilder(req.Url)
{
Scheme = Uri.UriSchemeHttps,
Port = 443
};
res.Redirect(builder.Uri.ToString());
}
base.OnActionExecuting(filterContext);
}
}
设置操作
[RequireHttps]
public ActionResult Index()
{
..
}
操作正在https中执行,其属性为“RequireHttps”但我遇到的问题是,没有属性的操作仍在https上执行,这不是必需的。
你能指出我在这里做错了什么吗?或建议我根据要求在https或http上执行操作的良好解决方案。