asp.net 动作方法的 mvc 4 自定义 url

asp.net mvc 4 custom urls for action method

我正在创建一个 asp.net mvc 4 应用程序

public class AspNetController : Controller
{
    //
    // GET: /AspNet/
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Introduction()
    {
        return View();
    }
}

如上图有AspNet Controller和介绍Action Method

介绍操作方法的默认 Url 是

localhost:55134/aspnet/introduction

但我想要Url喜欢

localhost:55134/aspnet/introduction-To-AspNet

同为 /localhost:55134/aspnet/NetFrameWork

/localhost:55134/aspnet/What-is-.Net-Framework

怎么做

从技术上讲,这个概念属于ASP.NET MVC 中的路由

为此,您需要在 RegisterRoutes(RouteCollection routes)

下的 App_Start->RouteConfig.cs 文件中为路由做一个条目

例如:

routes.MapRoute(
    "customRouteName", 
    "aspnet/introduction-To-AspNet", 
    new { controller = "AspNet", action = "Introduction" });

此处 aspnet/introduction-To-AspNet 将追加到您的基础 url 之后,即 localhost:55134/

快速而肮脏的答案是向您的 ~/AppStart/RouteConfig.cs 文件添加一个路由,它将被处理:

routes.MapRoute(
    name: "CustomRoute",
    url: "Aspnet/Introduction-To-AspNet",
    defaults: new { controller = "Home", action = "AspNet", id = UrlParameter.Optional }
);

但是,我假设这是针对某种类型的博客?我建议您有一个名为 view 的操作方法,然后使用您的姓名作为文章的参数。这样,您就不必在每次添加新文章或其他内容时都进入并编辑代码:

public class ArticlesController : Controller
{
    public ActionResult ViewArticle(string? title)
    {
        ViewBag.Article = title;
        return View();
    }
}

这样,您的 URL 将是 www.yoursite.com/Articles/ViewArticle/Introduction-To-AspNet。通常,如果可以避免的话,您不想在路由配置中添加大量特定路由。话虽这么说,如果这是遗留系统,路由 table 可能是唯一的方法。

编辑

好的,所以你可以做的是将字符串传递到 ViewBag 并使用 case 语句来确定要显示哪个局部视图(我认为这可能是你理想的解决方案):

<!--cshtml view-->
@switch(ViewBag.Article)
{
    case 'Introduction-To-AspNet':
        @Html.Partial('pathToPartialView.cshtml')
        break;
    case 'Some-Other-Article'
        @Html.Partial('pathToAnotherPartialView.cshtml')
        break;
    ...
    ...
    default:
        @Html.Partial('invalidArticleName.cshtml')
        break;
}

控制器将通过 ViewBag 传递文章名称,然后您可以使用 case 语句来确定要呈现的文章...当然,还有您一直在寻找的真正秘诀for: @Html.Partial('URL') - 如果你把它放在页面中,这将把你的部分呈现出来。您也可以将对象作为 FYI 传递给它。

此外,请确保您对 switch 语句有默认操作,该操作将显示某种 404 页面,指示 URL 中的名称无效。你总是希望在你从 URL 获取用户输入的任何时候都有这个,因为人们一直在玩弄 URL(更天真地,一直复制粘贴它们 wrong/incompletely )

您应该能够使用 ActionName 属性来装饰您的路线。

[ActionName("Introduction-To-AspNet")]
public ActionResult Introduction()
{
    return View();
}

您真的想使用 AttributeRouting,可以通过第三方包或本地使用。