私は現在、Microsoft の MVC4 に少し慣れていないため、ルーティングについて十分に理解していません。
私がやろうとしているのは、URL をより人間が読めるようにすることです。現在、次のような URL があります。
- foo.com/UserProfile/詳細/6
- foo.com/UserExperience/詳細/
- foo.com/UserSpecificController/Edit/8
すべてのユーザーコントローラーには「User」というプレフィックスが付いています。これらの URL を次のように変更できるかどうか疑問に思っていました。
- foo.com/u/プロフィール/詳細/6
- foo.com/u/Experience/詳細/
- foo.com/u/SpecificController/Edit/8
私の最初の試みはIISでした:
<rewrite>
<rules>
<rule name="AddTrailingSlashRule1" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="{R:1}/" />
</rule>
<rule name="Pretty User Redirect" enabled="false" stopProcessing="true">
<match url="User(.*)/(.*)" />
<action type="Redirect" url="u/{R:1}/{R:2}" />
<conditions>
</conditions>
</rule>
<rule name="User pretty URL Rewrite">
<match url="u/(.*)/(.*)" />
<action type="Rewrite" url="User{R:1}/{R:2}" />
</rule>
</rules>
</rewrite>
これは、すべてのリンクで/u/を取得することを除いて、非常にうまく機能しました...
例: foo.com/Home/WhatWeDo/
次のようになります: foo.com/u/Home/WhatWeDo/
これは 404 になります。
デフォルトのルーティング構成を使用しています
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
そして、私のリンクはすべて @Html.ActionLink(...) で描画されます
誰かがこれに光を当てることができれば、それは大歓迎です。