相关疑难解决方法(0)

如何在Global.aspx的Application_Start中获取完整的主机名+端口号?

我试过了

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)

谁知道如何实现这一目标?

c# asp.net url hostname request

49
推荐指数
2
解决办法
7万
查看次数

如何在asp.net mvc中只显示一次页面

在我的应用程序中,我正在检查某个配置文件是否可用,如果不是,那么我想重定向到安装页面.

对我来说,实现这一目标的最佳地点是application_start.因为它只发生了一次.如果我办理入住手续application_start并写信,Response.Redirect我会得到Response is not available in this context.

我尝试过其他的答案在堆栈溢出的重定向application_startHttpContext.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:响应在此上下文中不可用.

asp.net-mvc

9
推荐指数
1
解决办法
610
查看次数

MVC4按主机名捆绑

我是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)

c# bundle asp.net-mvc-4

7
推荐指数
1
解决办法
2112
查看次数

标签 统计

c# ×2

asp.net ×1

asp.net-mvc ×1

asp.net-mvc-4 ×1

bundle ×1

hostname ×1

request ×1

url ×1