控制器的重载索引方法

本文关键字:方法 索引 重载 控制器 | 更新日期: 2023-09-27 18:18:23

目标

重载索引"方法与myapp.com/Category/SomethingHere/相似

我有CategoryControllerIndex()方法如下:

//
// GET: /Category/
public ActionResult Index(string categoryName)
{
    if (categoryName != null)
        return View(categoryName);
    else
    {
        return Content("Test");
    }
}

并正常工作¹,直到我访问myapp.com/Category/Cars/myapp.com/Category/Sports/

当我尝试访问这些url时,我收到的响应是:

'/'应用程序出现服务器错误。

无法找到资源。

我已经试过了

At App_Start/RouteConfig.cs:

routes.MapRoute(
     name: "CategoriesMapping",
     url: "{controller}/{categoryName}",
     defaults: 
         new { controller = "Categoria", action = "Index", 
                     categoryName = URLParameters.Optional 
             }
 );

但是没有成功和问题是一样的。

考虑

我已经尝试过的其他事情:

public ActionResult Index(string? categoryName) { }

public ActionResult Index(Nullable<string> categoryName) { }

成功?不。当我使用这个语法

时,Visual Studio返回一个错误

类型"string"必须为非空值类型才能将其用作参数"T"在泛型类型或方法"System.Nullable"

¹:"Normally"意思是:如果我访问myapp.com/Category/, Test显示给我。

模棱两可的问题吗?

也许。不幸的是,我在Stack上找到的其他答案都不适合我。我已经试过帕特里克的问题,勃艮第爸爸的问题,安迪·埃文斯的问题和其他一些人的问题。

控制器的重载索引方法

你应该有这样的路由。

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

注意,约束说第一个片段必须完全是"Category"。这确保默认路由仍然可以处理所有其他请求。你必须保持默认路由,以免破坏其他控制器的约定。还要确保最后映射默认路由