web-dev-qa-db-ja.com

HTTPエラー403.14-禁止-IIS ExpressのMVC 4

これは、すでに何度も質問/回答されている質問のようです。そうではありません。

開発環境: VS 2012およびMVC 4.組み込みのIIS Expressを使用してアプリを実行しています。

このエラーは昨日まで発生していませんでした。いきなり発生し、行き詰まっています。奇妙なことに、1つのシナリオでのみ発生します。

アクセスしようとするとhttp://localhost:49962/managescholars/、エラーが表示されます

HTTP Error 403.14 - Forbidden
The Web server is configured to not list the contents of this directory.

しかし、http://localhost:49962/managescholars/Index 正常に動作します。同じコントローラの他のアクションメソッドも正常に動作します。といった http://localhost:49962/managescholars/create。他のすべてのコントローラーも同様に正常に動作します。

以下をweb.configに追加してみました。

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true" />
  <handlers/>
</system.webServer>

管理者として次のコマンドを実行してみました

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir

しかし、どれもうまくいきませんでした。

編集:

ルートを変更しました。彼らは次のように見えます。

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

        routes.MapRoute(
            name: "ManageScholarLectures",
            url: "Manage/Lectures/{userFriendlyName}",
            defaults: new { controller = MVC.ManageLectures.Name , 
                            action = MVC.ManageLectures.ActionNames.Index, 
                            userFriendlyName = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "ManageScholarEdit",
            url: "Manage/Scholars/{userFriendlyName}",
            defaults: new { controller = MVC.ManageScholars.Name, 
                            action = MVC.ManageScholars.ActionNames.Edit }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = MVC.Home.Name, 
                            action = MVC.Home.ActionNames.Index, 
                            id = UrlParameter.Optional }
        );
    }

使っています T4MVC テンプレート。

デフォルトルートを下部に残して最初の2つのルートを削除しても、引き続き機能しません。何が悪いのでしょうか?

よろしくお願いします。

20
Aamir

ルートは問題ないようです。これで問題が発生することはありません。エラーはhttp://localhost:49962/managescholars/でのみ発生します。これは、同じ名前の他のリソースが存在する可能性があることを意味します。あなたのコードが実行中に誤ってフォルダmanagescholarsを作成しないことを確認できますか? "

58
Yaqub Ahmad

同じ問題が発生しました。解決するのはとても簡単です。

この問題は、プロジェクトの設定で保護URLのプロパティを編集すると、IIS Expressの競合が原因で発生します。この問題を解決するのは非常に簡単です。

1-「.vs\config」ディレクトリで「applicationhost.config」ファイルを探します。このフォルダーは、ソリューションのルートにあります。あなたはメモ帳++を使用してそれを開くことができます

2-プログラムの「検索」を使用して、コントロールの名前を検索します(Ctrl + F)。私の場合、問題を引き起こしたコントロールは「オフィス」でした。

3-このようなURLのIIS設定を配置するノードをすべて削除します。以下の例を参照してください。

    <site name="G4.Admin(1)" id="8">
                <application path="/" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="C:\Projetos\PortalG4\src\G4.Admin" />
                    <virtualDirectory path="/Offices/Edit" physicalPath="C:\Projetos\PortalG4\src" />
                    <virtualDirectory path="/Offices" physicalPath="C:\Projetos\PortalG4" />
                </application>
                <application path="/Offices/Edit/2" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="C:\Projetos\PortalG4\src\G4.Admin" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:6920:localhost" />
                </bindings>
            </site>

すべての要素を削除する必要があります

<site name = "NAME_PROJECT" id = "X">

注:変更を行う前に、ファイルのバックアップを作成してください。

抱擁

3

まず、私はそれを仮定しています

 http://localhost:49962/managescholars/

実際に

 http://localhost:49962/manage/scholars/

。そうでなければあなたの問題があります:)

私はルートの専門家ではありませんが、ScholarsのルートではuserFriendlyNameパラメータはオプションではありません。つまり、http://localhost:49962/manage/scholars/はどのルールにも一致せず、IISはフォルダのコンテンツをリストする要求を扱います。

1
tymtam

すごい !!私の場合は、間違ったURLで実行するようにアプリケーションを構成したためですが、正しいURLに戻ったときに、見た目がapplicationhost.configを圧倒しませんでした。

上で述べたように、私はそれらのステップを解決することしかできませんでした。

1

誰かが同じ問題に遭遇した場合、私は必死にこのページに入りました。デバッグWebサイトは機能するが、1つのWebサイトでは機能しない場合:

Global.asaxの変更を確認しますルート構成がまだ存在するかどうかを確認します...

私はそれがばかげていることを知っていますが、gitマージの6時間後に失われました...

0
Pomme De Terre

私は元の質問に答えていることを知っていますが、私の場合は以下でうまくいきました。 IIS Expressを使用してVS2013でまったく同じ問題が発生しました。私の場合、/ Loginにアクセスすると、LoginControllerでIndexアクションが取得されませんでした。確認したところ、物理フォルダがありませんでしたが、さらに掘り下げた後、 IIS Express for/Login path for thisで作成された仮想ディレクトリ。この問題を解決するために、applicationhost config(Documents\IISExpress\config)から仮想ディレクトリを削除しました。

0
Anand

ユーザー名/に移動し、有効になっていない場合は有効にしてください。

0
Sneaky Anand

私の場合、@ Fl4v回答を使用した後、{my solution directory} .vs\configのapplicationhost.configファイルでdirectoryBrowse属性を検索しましたが、falseでした。 trueに変更し、iisを再起動すると、最終的に動作します。

0
Steferson

私の場合、Visual Studio 2015で、次の手順で問題を解決しました。

  • 停止IIS Express
  • Visual Studioを閉じる
  • {my solution directory} .vs\config内のファイルapplicationhost.configを削除します
  • ディレクトリDocuments\IISExpress\configを削除します
  • VS、F5を起動してお楽しみください:)
0
Fl4v