如果我理解您的问题正确,您想要为静态资源禁用会话状态。对此,您可以采取以下两种方法:
1)为控制器禁用
SessionState
为此,您需要导入
System.Web.SessionState
命名空间,然后在您的控制器上添加以下代码行进行装饰:
[SessioState(SessionStateBehavior.Disabled)
public class HomeController: Controller
{
}
如需更多信息,请访问以下链接:
控制会话状态行为
2)创建静态资源
IIS设置:
在inetpub目录中创建两个网站。
- www.domain.com // 用于主站点
- static.domain.com // 用于静态资源
现在将它们指向相同的物理目录,即
C:\inetpub\www.domain.com
将domain.com重定向到www.domain.com
将任何domain.com请求重定向到www.domain.com。
因为cookie为domain.com设置的cookie也将被所有子域包括static.domain.com共享,因此这是非常重要的步骤。
**代码更改**
在web.config文件中添加以下代码:
<appSettings>
<add key="StaticSiteName" value="static.domain.com"/>
<add key="StaticDomain" value="http://static.domain.com"/>
<add key="MainDomain" value="http://www.domain.com"/>
</appSettings>
使用PreApplicationStartMethod
和Microsoft.Web.Infrastructure
在预应用程序启动阶段动态注册HTTP模块。
public class PreApplicationStart
{
public static void Start()
{
string strStaticSiteName = ConfigurationManager.AppSettings["StaticSiteName"];
string strCurrentSiteName = HostingEnvironment.SiteName;
if (strCurrentSiteName.ToLower() == strStaticSiteName.ToLower())
{
DynamicModuleUtility.RegisterModule(typeof(StaticResource));
}
}
}
public class StaticResource : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
string strUrl = context.Request.Url.OriginalString.ToLower();
if (strUrl.Contains("Path/To/Static-Bundle/Resource") == false)
{
string strMainDomain = ConfigurationManager.AppSettings["MainDomain"];
context.Response.Redirect(strMainDomain);
}
}
public void Dispose()
{
}
添加扩展方法
介绍
public static class Extensions
{
public static string StaticContent(this UrlHelper url, string contentPath)
{
string strStaticDomain = ConfigurationManager.AppSettings["StaticDomain"];
return contentPath.Replace("~", strStaticDomain);
}
}
现在,从视图中使用
@Url.StaticContent()
,以便它会呈现静态资源url,并将其与静态域名static.domain.com关联,无论是图片、脚本、CSS还是bundles或者其他我们想要引用的不需要cookie的域名。例如:
<link href="@Url.StaticContent("~/Content/Site.css")" rel="Stylesheet" />
<script src="@Url.StaticContent("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script>
<script src="@Url.StaticContent("~/bundles/jquery")" type="text/javascript"></script>
<img src="@Url.StaticContent("~/Images/heroAccent.png")" alt="" />
请访问下面的链接以获取完整信息,因为这篇文章相当长:
无cookie域捆绑和静态资源
希望这能帮助您实现目标。