【问题标题】:asp.net MVC routing - javascript url 404 errorsasp.net MVC 路由 - javascript url 404 错误
【发布时间】:2017-06-20 22:18:25
【问题描述】:

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

我有一些 javascript 代码通过 ajax 调用调用我的控制器,如下所示:

url: "/en/Home/GetFormula/"

我希望它转到:/Management/en/Home/GetFormula,但它会转到站点的根目录并查找 /en/Home/GetFormula 并返回 404 错误。

关于如何将我的 javascript 路由修复为默认 /Management/ 作为站点根目录的任何想法?

谢谢

【问题讨论】:

    标签: javascript asp.net-mvc-3 http-status-code-404 iis-7.5 url-routing


    【解决方案1】:

    当传递给 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 框架allows you to dynamically generate JavaScript code on the server and run it on the client,与allows you to dynamically generate HTML content and of course send it to the client 相同。这样一来,您就可以将伪 URL 扩展为服务器端的实际 URL,然后将生成的 JavaScript 代码部署到客户端。

    【讨论】:

      【解决方案2】:

      为避免混淆您当前所在的位置:

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

      【讨论】:

      • 如果当前文档的 URL 深埋在(可能是虚拟的)目录结构中,这将不起作用。
      • 你是要获取js文件本身的位置吗?
      • 我不想做任何事情。我不是最初的海报。
      【解决方案3】:

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

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

      然后,在您的 javascript 代码上,您可以这样做:

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

      【讨论】:

        猜你喜欢
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        • 2010-10-30
        • 1970-01-01
        • 2017-03-25
        • 2015-06-01
        相关资源
        最近更新 更多