Mat*_*ski 5 c# asp.net iis asp.net-mvc redirect
这个问题应该在某个地方回答,但我会尝试解释这个场景:
我有一个应用程序 ASP.NET MVC,当我在本地调试它或在根 IIS 中部署时它工作正常,但是如果我将它部署为 IIS 上的应用程序(使用别名),所有引用的文件都将指向错误的位置。
我正在使用(用于测试)我的本地机器作为网络服务器。默认情况下,应用程序重定向到应用程序/登录地址。
例子:
1) 如果我将应用程序部署在 C:\inetpub\wwwroot 中,并通过 URL http://localhost访问它,则该网站工作正常,没有文件中断或其他任何问题。该网站将用户重定向到页面http://localhost/Login
2) 如果我在 C:\inetpub\wwwroot\app1 中部署应用程序,并通过 URL http://localhost/app1访问它,所有引用的链接和重定向都链接到http://localhost而不是http://localhost /app1,当默认重定向发生时,它会将我重定向到http://localhost/Login,而不是http://localhost/app1/Login。
我尝试使用 Web.config 上的资源“位置”,将路径设置为“.”、“~”(使应用程序崩溃)和“/”,将 inheritInChildApplications 设置为 true/false,将其设置在上面的一个节点上System.web 节点,但这些尝试都没有对我有用。
并且在RouteConfig 上将重定向设置为Login 是没有用的,因为它只会解决Login 重定向问题,而不能解决整个问题。考虑到 BundleConfig 正在以相同的方式读取。
我将 system.web 节点留在 Web.config 节点中,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
免责声明:我不知道如何从 web.config 内部执行此操作,您需要计算托管基地址。请参阅此答案:/sf/answers/1390640611/
您可以使用 HttpRequestContext 中的 VirtualPathRoot 属性 (request.GetRequestContext().VirtualPathRoot)
这只会获取服务器基地址下的路径,因此要获取正在运行的 IIS 应用程序的完整 URL,我使用:
var baseUrl = string.Format("{0}{1}/", Request.RequestUri.GetLeftPart(UriPartial.Authority), RequestContext.VirtualPathRoot);
Run Code Online (Sandbox Code Playgroud)
一旦你有了这个,你就可以在服务器端代码中重定向
归档时间: |
|
查看次数: |
1205 次 |
最近记录: |