Tôi đang cố triển khai định tuyến thay thế trong ứng dụng web MVC 5 của mình.Định tuyến thay thế MVC không thành công với tham số tùy chọn
Tôi có mã điều khiển:
namespace MyMvcProject.Web.Controllers
{
[RoutePrefix("account")]
public class AccountController : Controller {
[Route("{param}")]
[Authorize]
public ActionResult Index(string param = null) {
...
mà hoạt động tuyệt vời khi đánh url: http://example.com/account/testparam
. Tuy nhiên, tôi muốn có giá trị param
làm thông số tùy chọn.
Tôi đã thử thay đổi [Route("{param}")]
thành [Route("{param}*")]
nhưng sau đó không bao giờ nhập phương thức Index()
. Tôi cũng đã thử thay đổi nó thành [Route("{param:string=Test}")]
nhưng tôi gặp lỗi thời gian chạy định tuyến với cụm từ string
.
My RoutConfig.cs
chứa:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{param}",
defaults: new { controller = "Home", action = "Index", param = UrlParameter.Optional }
);
}
Có ai có bất kỳ ý tưởng làm thế nào tôi có thể buộc Index()
để có một tham số tùy chọn sử dụng cú pháp định tuyến thay thế này? Nó khá hữu ích trong các phần khác của ứng dụng của tôi, vì vậy tôi muốn giữ các trang trí RoutePrefix
và Route
.
CẬP NHẬT
tôi vẫn đang cố gắng để con số này ra, vì vậy tôi đã thay đổi trang trí tuyến đường của tôi để [Route("{param:int=0}")]
và constructor của tôi để public ActionResult Index(int id)
và nó hoạt động như mong đợi (ví dụ, http://example.com/account
cư xử như thể http://example.com/account/0
đã được nhập. Đây chính là điều tôi muốn, chỉ sử dụng kiểu dữ liệu string
Khi tôi thay đổi trang trí để:. [Route("{id:string=\"\"}")]
và các nhà xây dựng để public ActionResult Index(string id)
và tôi thấy lỗi runtime:
The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'string'.
Mẹo hữu ích về đơn đặt hàng. – Nicholi