C# 在Mvc上的每个非Ajax请求中生成唯一的guid
我的所有视图都有这样一个_ViewStart:C# 在Mvc上的每个非Ajax请求中生成唯一的guid,c#,asp.net-mvc,C#,Asp.net Mvc,我的所有视图都有这样一个_ViewStart: @{ if (!Request.IsAjaxRequest()) { Layout = "~/Views/Shared/_Layout.cshtml"; } } 我需要为每个非Ajax请求生成一个唯一的Guid,并且我需要在所有操作上访问该Guid 它将用于添加/访问会话变量,以避免跨选项卡并发 我该怎么做呢?你得把这个传给别人,它会非常脆弱。基本上,每个表单都必须有一个隐藏的输入,您可以在其中填充该值,并且每个链接
@{
if (!Request.IsAjaxRequest())
{
Layout = "~/Views/Shared/_Layout.cshtml";
}
}
我需要为每个非Ajax请求生成一个唯一的Guid,并且我需要在所有操作上访问该Guid
它将用于添加/访问会话变量,以避免跨选项卡并发
我该怎么做呢?你得把这个传给别人,它会非常脆弱。基本上,每个表单都必须有一个隐藏的输入,您可以在其中填充该值,并且每个链接都必须将该值作为查询字符串追加。如果你忘记做一次,那么价值将无法挽回地丧失 表格
@Html.Hidden("guid", Request["guid"])
@Html.ActionLink("SomeAction", new { guid = Request["guid"] })
链接
@Html.Hidden("guid", Request["guid"])
@Html.ActionLink("SomeAction", new { guid = Request["guid"] })
然后,如果该值不存在,您需要为您的操作设置一些内容来设置该值。您很可能希望使用全局操作筛选器:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AddGuidAttribute : FilterAttribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.RequestContext.HttpContext.Request;
if (request["guid"] == null)
{
var builder = new UriBuilder(request.RawUrl);
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
query["guid"] = Guid.NewGuid();
builder.Query = query.ToString();
filterContext.Result = new RedirectResult(builder.ToString());
}
}
}
然后在FilterConfig.cs
中:
filters.Add(new AddGuidAttribute());
我想是的,就基本形式而言Authentication@Paul:那么,不,您没有使用OWIN。表单身份验证不兼容。