asp.net MVC路由- javascript url 404错误

asp.net MVC routing - javascript url 404 errors

本文关键字:url 错误 javascript net MVC 路由 asp      更新时间:2023-09-26

在本地开发我的应用程序(asp.net mvc3)时,使用VS dev应用程序服务器一切都很好。该应用程序位于localhost/。但是,我试图将应用程序部署在/Management目录下的IIS 7.5服务器上,并且有很多路由问题,因为我的应用程序中的一些调用依赖于应用程序在路由上。

我有一些javascript代码,通过ajax调用我的控制器,看起来像这样:

url: "/en/Home/GetFormula/"

我希望它去:/Management/zh/Home/GetFormula,但它去了网站的根,寻找/zh/Home/GetFormula,并返回404错误。

关于如何修复我的javascript路由到默认/管理/作为网站的根的任何想法?

谢谢

当传递给HTTP请求的伪url以斜杠开头时(例如:"/path/to/resource"),伪url是"完成的",将其视为给定的路径位于网站的根目录下(例如:"http://my.site/path/to/directory")。

显然,您希望伪url被处理,就好像给定的路径位于Web应用程序的根目录下一样。好吧,我有个坏消息要告诉你:HTTP协议不处理像"Web应用程序"这样的事情。

ASP。. NET MVC框架提供了Url.Content函数,它接受以波浪字符开头的伪url(例如,"~/path/to/resource"),并返回用Web应用程序的根目录(例如,"http://my")替换波浪字符的结果。site/an/application/path/to/resource",假设Web应用程序的根目录是"http:/my.site/an/application")。然而,ASP。. NET MVC框架只在服务器端可用。如果你的JavaScript运行在客户端,它不能调用Url.Content

但并不是所有的都失去了。ASP。. NET MVC框架允许你在服务器上动态生成JavaScript代码并在客户端上运行,同样的,它允许你动态生成HTML内容并将其发送到客户端。这样,您就可以在服务器端上将伪url扩展为实际的url ,并将生成的JavaScript代码部署到客户机。

为了避免对当前位置的混淆,请尝试:

url: document.URL + "/Management/Home/GetFormula"

我解决了这个问题,在我的页面上添加了一个html隐藏字段,在服务器端,我用url推断出正确的url。RouteUrl方法如下:

<input id="MyHiddenFieldName" name="MyHiddenFieldName" type="hidden" value="@Url.RouteUrl(new { area = "MyArea", controller = "MyController", action = "MyAction" />

那么,在你的javascript代码中你可以这样做:

url: $("#MyHiddenFieldName).val()