0

最近、VS2012/VS2010を実行しているPCにWindows7を新規インストールしました。このPCにプルして実行する前に、MVC3プロジェクトが正常に実行されました。プロジェクトは引き続きこのPCでコンパイルされ、スタジオ(2010または2012)でアプリを実行しながらサイト内を移動できますが、任意のビューの任意のフォームからPOSTを実行し、次のようなURLを使用してIDを渡そうとした場合:

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

...このエラーが発生しました。私はこれを修正するためにいくつかの掘り下げと遊びを行い、最終的には解決を試みるために次の手順を実行しました。

  1. コントロールパネルのWindowsコンポーネントフォームから実際にインストールされたASP.NET
  2. IISExpressを使用するようにアプリケーションを変更しました

さて、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 »

これがルートであることを認識しておらず、明らかに存在しない物理ファイル(1.htmlなど)にURLを解決しようとしているようです。しかし、なぜ「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 | Visual Studio 2010/2012 | Microsoft MVC3 | IIS Express


私はこれらすべてのSO投稿を読みましたが、この状況には当てはまらないか、役に立たないようです(主に、コントローラーを介してページを読み込もうとしている実際のaspxページに当てはまるため):

パス'/'へのアクセスに使用されるHTTP動詞POSTは許可されていません

パスへのアクセスに使用されるHTTP動詞POSTは許可されていません

パス'/Membership /user/'へのアクセスに使用されるHTTP動詞POSTは許可されていません

パス'/Main/[オブジェクトオブジェクト]'へのアクセスに使用されるHTTP動詞POSTは許可されていません

パス'[mypath]'へのアクセスに使用されるHTTP動詞POSTは許可されていません

パス'/'へのアクセスに使用されるHTTP動詞POSTはFacebookアプリでは許可されていません


何か案は?

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 に答える