这个问题应该在某个地方回答,但我会尝试解释这个情景:
我有一个应用程序ASP.NET MVC,当我在本地调试它或在Root IIS中部署时工作正常,但如果我将它作为IIS上的应用程序部署(使用别名),则所有引用的文件都将指向错误的位置。
我使用(用于测试)我的本地计算机作为Web服务器。默认情况下,应用程序重定向到应用程序/登录地址。
示例:
1)如果我在C:\ inetpub \ wwwroot中部署应用程序,并通过URL http://localhost访问它,该网站工作正常,没有文件中断或其他什么。该网站将用户重定向到页面http://localhost/Login
2)如果我在C:\ inetpub \ wwwroot \ app1中部署应用程序,并通过URL http://localhost/app1访问它,则所有引用的链接和重定向都链接到http://localhost而不是{{3} },当默认重定向发生时,它会将我重定向到http://localhost/app1,而不是http://localhost/Login。
我尝试使用资源" location"在Web.config上,将路径设置为"。","〜" (崩溃了应用程序)和" /",将inheritInChildApplications设置为true / false,将其设置在System.web节点上方的一个节点上,但这些尝试都不适用于我。
没有必要将重定向设置为在RouteConfig上登录,因为它只能解决登录重定向问题,而不能解决整个问题。考虑BundleConfig以相同的方式读取。
我在Web.config节点中离开了system.web节点,如下所示:
<location path="." inheritInChildApplications="false">
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="60" />
</authentication>
<roleManager enabled="true">
</roleManager>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
</system.web>
答案 0 :(得分:0)
免责声明:我不知道如何从web.config内部执行此操作 您需要锻炼托管基址。 查看此答案:https://stackoverflow.com/a/19866294
您可以使用HttpRequestContext中的VirtualPathRoot属性 (request.GetRequestContext()。VirtualPathRoot)
这只会使您获得服务器基址下的路径,因此要获取我使用的正在运行的IIS应用程序的完整URL,
var baseUrl = string.Format("{0}{1}/", Request.RequestUri.GetLeftPart(UriPartial.Authority), RequestContext.VirtualPathRoot);
有了这个,您就可以在服务器端代码内重定向