我试过了
Uri uri = HttpContext.Current.Request.Url;
String host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Run Code Online (Sandbox Code Playgroud)
它在我的本地机器上运行良好,但在发布到IIS7时,有一个例外
System.Web.HttpException: Request is not available in this context
Run Code Online (Sandbox Code Playgroud)
谁知道如何实现这一目标?
在我的应用程序中,我正在检查某个配置文件是否可用,如果不是,那么我想重定向到安装页面.
对我来说,实现这一目标的最佳地点是application_start.因为它只发生了一次.如果我办理入住手续application_start并写信,Response.Redirect我会得到Response is not available in this context.
我尝试过其他的答案在堆栈溢出的重定向application_start像HttpContext.Current.Response.Redirect; 没有人为我工作.
我不想在a base controller或a中执行它,filter因为检查逻辑将针对每个请求发生.
我的目标是只检查一次,最好是应用程序启动时.
更新1
我将response.redirect添加到application_start但是得到了如下错误:
申请开始:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Response.RedirectToRoute(
new RouteValueDictionary {
{ "Controller", "Home" },
{ "Action", "about" }
});
}
Run Code Online (Sandbox Code Playgroud)
但我收到这样的错误:
在这种情况下无法获得响应.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.Web.HttpException:响应在此上下文中不可用.
我是MVC的新手.
我知道如何创建捆绑包,它很简单,它是一个很棒的功能:
bundles.Add(new StyleBundle("~/content/css").Include(
"~/content/main.css",
"~/content/footer.css",
"~/content/sprite.css"
));
Run Code Online (Sandbox Code Playgroud)
但是,假设您的应用程序可以在不同的域下访问,并根据主机名为不同的css提供不同的内容.
如何根据主机名包含不同的文件包?在我的RegisterBundles所在的应用程序启动中(就像我开始使用的MVC标准的Internet应用程序),我甚至都不知道主机名.
什么是最佳做法?
如果我在注册捆绑包时可以使用主机名,我可以为当前主机名选择正确的.css文件.我可以在应用程序开始请求中注册bundle,并以某种方式检查它是否已经注册,如果没有,请选择正确的文件作为请求的主机名并注册它?
如果有,怎么样?
编辑1
在过去的两个小时里,我更深入地研究了这个主题,让我提出我的解决方案,希望谁比我更专业,MVC可以纠正我的方法,如果错误的话.
我换了:
@Styles.Render("~/Content/css")
Run Code Online (Sandbox Code Playgroud)
有:
@Html.DomainStyle("~/Content/css")
Run Code Online (Sandbox Code Playgroud)
这只是一个简单的帮手:
public static class HtmlExtensions
{
public static IHtmlString DomainStyle(this HtmlHelper helper, string p)
{
string np = mynamespace.BundleConfig.RefreshBundleFor(System.Web.Optimization.BundleTable.Bundles, "~/Content/css");
if (!string.IsNullOrEmpty(np))
return Styles.Render(np);
else
{
return Styles.Render(p);
}
}
}
Run Code Online (Sandbox Code Playgroud)
RefreshBundleFor的位置是:
public static string RefreshBundleFor(BundleCollection bundles, string p)
{
if (bundles.GetBundleFor(p) == null)
return null;
string domain = mynamespace.Utilities.RequestUtility.GetUpToSecondLevelDomain(HttpContext.Current.Request.Url);
string key = p + "." + domain;
if (bundles.GetBundleFor(key) == …Run Code Online (Sandbox Code Playgroud)