Asp.net mvc 如何在MVC5中为动态填充的页面重写URL

Asp.net mvc 如何在MVC5中为动态填充的页面重写URL,asp.net-mvc,model-view-controller,url-rewriting,asp.net-mvc-5,url-routing,Asp.net Mvc,Model View Controller,Url Rewriting,Asp.net Mvc 5,Url Routing,我只是在创建一个数据库驱动的web应用程序。为此,我创建了一个控制器: public class PagesController : Controller { private StoreDB db = new StoreDB(); public ActionResult LoadOneColumnPageContent(string pageId) { List<tbl_UserControl> tbl_UserControls = db.t

我只是在创建一个数据库驱动的web应用程序。为此,我创建了一个控制器:

public class PagesController : Controller
{
    private StoreDB db = new StoreDB();

    public ActionResult LoadOneColumnPageContent(string pageId)
    {
        List<tbl_UserControl> tbl_UserControls = db.tbl_UserControl.Where(it => it.Active == true && it.PageId == pageId).OrderBy(it => it.Id).ToList();
        return View(tbl_UserControls);
    }
    public ActionResult LoadFullWidthPageContent(int id)
    {
        List<tbl_UserControl> tbl_UserControls = db.tbl_UserControl.Where(it => it.Id == id).ToList();
        return View(tbl_UserControls);
    }
}
并在视图中显示数据:

    @using Microsoft.Ajax.Utilities
    @model IEnumerable<newSiteMVC.Models.tbl_UserControl>
    @{
        ViewBag.Title = "LoadOneColumnPageContent";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

    @*<%--------------------- Top Banner with moving image ---------------------%>*@

    @Html.Partial("~/Views/Pages/Shared/_PageTopBanner.cshtml", Model)

    @*<%--------------------- Main page content ---------------------%>*@

    @foreach (var item in Model.Where(it => it.TypeId != "NewsFeed" && it.PageId == @Request.QueryString["pageId"]))
    {
        if ( item.TypeId != "TopBanner" && item.TypeId != "TwoColumn" && item.TypeId != "VideoPod")
        {
            if (string.IsNullOrEmpty(item.ImageUrl))
            {
                @Html.Partial("~/Views/Pages/Shared/_OneColumnComponent.cshtml", item)
            }
            else
            {
                @Html.Partial("~/Views/Pages/Shared/_OneColumnWithImageComponent.cshtml", item)
            }
        }
    }
    @if (@Request.QueryString["pageId"] == "InTheNews")
    {
        @Html.Partial("~/Views/Pages/Shared/_OneColumnWithLinkComponent.cshtml", Model)

    }

    @if (@Request.QueryString["pageId"] == "ContactUs")
    {
        @Html.Partial("~/Views/Pages/Shared/_FullWidthContactPage.cshtml", Model)

    }

    @if (@Request.QueryString["pageId"] == "ShoppingCart")
                {
        @Html.Partial("~/Views/Pages/Shared/_TwoColumnComponent.cshtml", Model)

    }

    @*<%--------------------- Moving Background Image ---------------------%>*@

    @Html.Partial("_MovingBackgroundImage")

我想知道是否有任何方法可以使URL更加SEO友好,考虑到除了在同一控制器中使用不同操作的两个页面之外,所有页面都是通过相同的控制器和操作加载的(每个pageId显示不同的数据)。我想链接看起来像

 www.somewebsite.com/News/54
 www.somewebsite.com/ContactUs 
 www.somewebsite.com/AboutUs 

有可能吗?如果有,我有什么想法可以实现吗

这不是一个完整的答案,但我想给你一个提示,因为我曾在类似的路线上工作过,这样可以使页面更加SEO友好。如果它能帮助你,你可以利用它

         var route1 = routes.MapRoute(
             name: "Products",
             url: "Clothes/{param1}/{param2}",
             defaults: new { controller = "Products", action = "Clothes", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
             ); 
这里Param1和Param2是可选的,您可以在那里添加任何内容

就像您的情况一样,您可以添加

www.somewebsite.com/content/News/54

         var route1 = routes.MapRoute(
             name: "Page",
             url: "Content/{param1}/{param2}",
             defaults: new { controller = "Page", action = "LoadOneColumnPageContent", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
             ); 

只能将最后一个参数标记为
UrlParameter。可选
 www.somewebsite.com/News/54
 www.somewebsite.com/ContactUs 
 www.somewebsite.com/AboutUs 
         var route1 = routes.MapRoute(
             name: "Products",
             url: "Clothes/{param1}/{param2}",
             defaults: new { controller = "Products", action = "Clothes", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
             ); 
         var route1 = routes.MapRoute(
             name: "Page",
             url: "Content/{param1}/{param2}",
             defaults: new { controller = "Page", action = "LoadOneColumnPageContent", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
             );