3

奇妙な質問があります。のように、拡張機能なしで実行するようにセットアップされた MVC コードに取り組んでい/Home/Index?id=10 ます/Home.mvc/Index?id=10

両方のルートが機能することを望みます。global.asax.cs ファイルで、次のコードを作成しました。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute("Default2",
                    "{controller}.mvc/{action}/{id}",
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    routes.MapRoute("Default", 
                    "{controller}/{action}/{id}", 
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    );
}

これはほとんどうまくいきました!しかし残念なことに、コントローラーが RedirectToAction を返すと、生成された URL が失敗します。

次のように RedirectToAction を呼び出します。

return RedirectToAction("Index", "Account");

そして、これを返します:

/Account.mvc

現在は Index が想定されているため、それが欠落している心配はありません。ただし、/その URL の末尾には何もないため、404 エラーが返されます。を追加すると正常に/動作します。MVC が URL を正しく生成できるようにする方法はありますか、またはルートを変更してこの URL を認識させる方法はありますか?

背景: Web サーバーを IIS 7.5 にアップグレードした後、拡張子のない URL を使用するようにアプリケーションを変換し始めたため、この状況に陥っています。外の世界と共有されていたアプリケーションへのリンクがたくさんあることに気がつきませんでした.拡張子なしに変更すると、それらのリンクがすべて壊れてしまいました. どっ!一人で十分に残すべきだった。

4

3 に答える 3

1

個人的にはURL Rewriterを使用します。IIS Rewrite Module を使用して、ASP.NET レガシ URL を Extensionless にリダイレクトできます。

たとえば、次のようなアウトバウンド ルールを作成できます (正確ではありませんが、必ずテストが必要です)。

  <outboundRules>
    <rule name="remove .mvc outbound 1">
      <match serverVariable="RESPONSE_LOCATION" 
             pattern="^/(.*).mvc$" />
      <action type="Rewrite" value="/{R:1}" />
    </rule>
    <rule name="remove .mvc outbound 2">
      <match filterByTags="A, Form, IFrame, Img, Input, Link, Script" 
             pattern="^/(.*).mvc$" />
      <action type="Rewrite" value="/{R:1}" />
    </rule>
  </outboundRules>

誰かが MVC 拡張機能をハードコードすることにした場合...

    <rule name="Add Slash Inbound">
      <match url="(.*)" />
      <conditions>
        <add input="{PATH_INFO}" pattern="^/(.*).mvc$" negate="true" />
      </conditions>
      <action type="Rewrite" url="{R:0}/" />
    </rule>
于 2014-02-05T16:13:01.970 に答える
0

ここでは、各リクエストの最後に / を追加してソリューションをコーディングしているようです。各 URL の最後に末尾のスラッシュを追加しますか? . それが十分でない場合は、何か他のものを試すことができます:)

于 2014-02-01T22:19:46.213 に答える