0

我最近刚刚在运行 VS2012/VS2010 的 PC 上全新安装了 Windows 7。我有一个 MVC3 项目,在我将它拉到这台 PC 上运行之前,它运行得很好。该项目仍在这台 PC 上编译,我可以在工作室(2010 或 2012)中运行应用程序时浏览我的网站,但是当我尝试从任何视图中的任何表单发布并通过 URL 传递 ID 时,如下所示:

    <form id="ScriptForm" action="/MyApp/ControllerName/ActionName/@ViewBag.IDNumber" method="post">
    ...
    </form>

...我收到了这个错误。我做了一些挖掘和尝试来解决这个问题,最终采取了这些步骤来尝试解决:

  1. 实际通过控制面板中的 Windows 组件表单安装了 ASP.NET
  2. 将应用程序更改为使用 IIS Express

好吧,当我将其更改为在 IIS Express 下运行时,我开始收到不同的错误。

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is 
temporarily unavailable.

Most likely causes:
The directory or file specified does not exist on the Web server.
The URL contains a typographical error.
A custom filter or module, such as URLScan, restricts access to the file.

Things you can try:
Create the content on the Web server.
Review the browser URL.
Check the failed request tracing log and see which module is calling SetStatus. For more information, click here.

Detailed Error Information:
Module     IIS Web Core
Notification       MapRequestHandler
Handler    StaticFile
Error Code     0x80070002
Requested URL      http://localhost:51596/MyApp/ControllerName/ActionName/1
Physical Path      C:\CODE\MyApp\ControllerName\ActionName\1
Logon Method       Anonymous
Logon User     Anonymous
Request Tracing Directory      C:\Users\cbarlow\Documents\IISExpress\TraceLogFiles\MYAPP

More Information:
This error means that the file or directory does not exist on the server. Create the file or directory and try the request again.
View more information »

就好像它没有认识到这是一条路由,并试图将 URL 解析为一个显然不存在的物理文件(如 1.html)。但是为什么它不“做 MVC 的事情”并使用路由呢?我的 global.asax 中有这个:

  public static void RegisterRoutes(RouteCollection routes)
  {
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

     routes.MapRoute(
         "Default", // Route name
         "{controller}/{action}/{id}", // URL with parameters
         new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
     );

  }

我知道它正在运行,因为我可以断点它。


规格:Windows 7 | 视觉工作室 2010/2012 | 微软 MVC3 | IIS 快递


我已经阅读了所有这些 SO 帖子,似乎没有一个适用于这种情况或没有帮助(主要是因为它们适用于实际的 aspx 页面,我试图通过控制器加载页面):

不允许使用用于访问路径“/”的 HTTP 动词 POST

不允许使用 HTTP 动词 POST 访问路径

不允许使用 HTTP 动词 POST 访问路径“/Membership/user/”

不允许使用 HTTP 动词 POST 访问路径“/Main/[object Object]”

不允许使用用于访问路径“[我的路径]”的 HTTP 动词 POST

Facebook 应用程序中不允许用于访问路径“/”的 HTTP 动词 POST


有任何想法吗?

4

1 回答 1

0

问题就在这里(由于我对 MVC/CSHTML 缺乏经验):

<form id="ScriptForm" action="/MyApp/ControllerName/ActionName/@ViewBag.IDNumber" method="post">
...
</form>

MyApp 曾经可以在我的 PC 上运行(老实说,我不确定为什么它现在不起作用......也许我之前已经为该名称设置了一些东西来解析?)但它不再映射到任何东西。它确实可以在服务器上运行,但那是因为 IIS 中确实存在“MyApp”的映射。只需将此表单更改为:

<form id="ScriptForm" action="@Url.Content("~/ControllerName/ActionName/" + ViewBag.IDNumber)" method="post">
...
</form>

...更优雅且没有错误地完成工作。

于 2012-10-05T12:38:19.833 回答