2

ASP.NETMVC4のWebサイト。

「Locations」という名前のデータベーステーブルを取得しました。このテーブルには、3つの可能な場所(「CA」、「NY」、「AT」など)のみが含まれています。デフォルトルートは次のとおりです。

http://server/Location/  --- list of Locations
http://server/Location/NY --- details of NY-Location

/ Location /-ビットなしでカスタムルートを作成するにはどうすればよいですか?(私はもう少しいいと思います)

となることによって

http://server/NY - details of NY
http://server/AT - details of AT
.... etc...

http://server/Location  --- list of Locations
4

2 に答える 2

7

解決策は、ルート制約を使用してカスタムルートを実行することです:(順序が重要です)

routes.MapRoute(
    name: "City",
    url: "{city}",
    constraints: new { city = @"\w{2}" },
    defaults: new { controller = "Location", action = "Details", id = UrlParameter.Optional }
);

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

一致するコントローラーを使用する場合:

public class LocationController : Controller
{
    //
    // GET: /Location/
    public ActionResult Index()
    {
        return View();
    }

    //
    // GET: /{city}
    public ActionResult Details(string city)
    {
        return View(model:city);
    }
}

NY、CA、ATのみを許可する場合は、次のようにルート制約を記述できます。

constraints: new { city = @"NY|CA|AT" }

(小文字も機能します)。ルート制約を使用する代わりに、もう1つのより一般的な解決策は、独自のを実装することIRouteConstraintです。私の前の答えを見てください。

于 2012-09-20T18:42:12.290 に答える
0

必要なのは、コントローラー内のルートを指定することです。ルート制約を指定する方法については、このチュートリアルを参照してください。

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs

ルート制約を使用して、特定のルートに一致するブラウザー要求を制限します。正規表現を使用して、ルート制約を指定できます。

この投稿もご覧ください:/ News/5のルートをニュースコントローラーにマッピングする方法

于 2012-09-20T18:17:00.203 に答える