簡體   English   中英

需要ASP.NET MVC Route Id參數

[英]Make ASP.NET MVC Route Id parameter required

我有這條路線:

routes.MapRoute(
            "PlaceDetails",
            "{controller}/{action}/{id}",
            new { controller = "Place", action = "Details", id = UrlParameter.Optional }
        );

這路由很好:mysite.com/place/details/123

使Id 123可用於場所控制器的詳細操作 - 然后可以查找位置'123'。

但是 - 此URL也會傳遞給控制器​​:mysite.com/place/details/

我想要它返回HttpNotFound - 但它向控制器發送一個空的Id - 並要求我處理它。

如果路由本身實現了這一點,而不是在控制器本身中需要不合理的空檢查,那似乎更整潔。

我在谷歌沒有發現這個具體問題。

我怎樣才能做到這一點?

要使id值成為必需值,您不能將其設置為UrlParameter.Optional或提供任何其他默認值。 如果URL段中沒有值,並且沒有默認值,則路由將與請求不匹配。

routes.MapRoute(
    "PlaceDetails",
    "{controller}/{action}/{id}",
    new { controller = "Place", action = "Details" }
);

但是你可能還需要以另一種方式限制路由,以防止它在不應該匹配的情況下進行匹配。

routes.MapRoute(
    "PlaceDetails",
    "Place/{action}/{id}",
    new { controller = "Place", action = "Details" }
);

請參閱為什么在asp.net mvc中的常用路由之前首先映射特殊路由? 有關詳細信息和其他選項。

刪除默認值中id占位符的可選項

routes.MapRoute(
        "PlaceDetails",
        "{controller}/{action}/{id}",
        new { controller = "Place", action = "Details"}
    );

現在mysite.com/place/details/與路線不匹配。 如果您沒有映射另一個默認路由。

如果上述原因與您的路由沖突,您可以像這樣修改它

routes.MapRoute(
        "PlaceDetails",
        "Place/Details/{id}",
        new { controller = "Place", action = "Details"}
    );

它將此映射直接耦合到PlaceController.Details操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM