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

时间:2015-10-09 16:12:07

标签: asp.net asp.net-mvc-4 custom-url

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

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

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

如上所示有AspNet控制器和简介操作方法

简介操作方法的默认网址是

本地主机:55134 / ASPNET /介绍

但我想要Url赞

本地主机:55134 / ASPNET /引入到ASPNET

同样的 / localhost:55134 / aspnet / NetFrameWork

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

如何做到

3 个答案:

答案 0 :(得分:3)

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

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

你真的想使用AttributeRouting,或者通过第三方软件包,或者如果可以的话本地使用。

答案 1 :(得分:1)

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

为此,您需要在alter sequence

下的App_Start->RouteConfig.cs文件中为路线输入一个条目

例如:

RegisterRoutes(RouteCollection routes)

此处 aspnet / introduction-To-AspNet 会在您的基本网址后附加,即 localhost:55134 /

答案 2 :(得分:0)

快速而肮脏的答案是为〜/ 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();
    }
}

这样,你的网址就是www.yoursite.com/Articles/ViewArticle/Introduction-To-AspNet。一般情况下,如果可以避免,请不要在路由配置中添加大量特定路由。话虽这么说,如果这是遗留系统,路由表可能是唯一的方法。

修改

好的,你可以做的是将字符串传递给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传递文章名称然后您可以使用案例陈述来确定要呈现的文章......当然,您一直在寻找真正的秘密酱for:@Html.Partial('URL') - 如果您将其放在页面中,这将取消您的部分并将其渲染为正确。您也可以像对待FYI一样将对象传递给它。

此外,请确保您在switch语句上有一个默认操作,该操作将显示某种404页面,指示URL中的名称无效。你总是希望在你从URL获取用户输入的时候拥有这个,因为人们一直在使用URL(而且更无辜,复制+粘贴错误/不完整)