Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Mvc上的每个非Ajax请求中生成唯一的guid_C#_Asp.net Mvc - Fatal编程技术网

C# 在Mvc上的每个非Ajax请求中生成唯一的guid

C# 在Mvc上的每个非Ajax请求中生成唯一的guid,c#,asp.net-mvc,C#,Asp.net Mvc,我的所有视图都有这样一个_ViewStart: @{ if (!Request.IsAjaxRequest()) { Layout = "~/Views/Shared/_Layout.cshtml"; } } 我需要为每个非Ajax请求生成一个唯一的Guid,并且我需要在所有操作上访问该Guid 它将用于添加/访问会话变量,以避免跨选项卡并发 我该怎么做呢?你得把这个传给别人,它会非常脆弱。基本上,每个表单都必须有一个隐藏的输入,您可以在其中填充该值,并且每个链接

我的所有视图都有这样一个_ViewStart:

@{
   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。表单身份验证不兼容。