asp.net-mvc – 如何允许用户在ASP.NET MVC中创建永久链接?
我的路线定义为:
{theme} / {subtheme} / {urltitle}用于列出文章详细信息,我想让其他人(不是开发人员)为特定文章创建永久链接,例如http://www.whateverdomain/article – 关于-车/: 题 如果本文有固定链接,如何处理{theme} / {subtheme} / {urltitle}的请求被重写为固定链接? 解决方法
要实现这一目标,您需要做三件事:
>定义一个足够模糊的路由,内部数据库调用可以使用该路径,其中包含与该文章相关的某些特定信息. 首先,让我们从我们的文章需要的信息开始: 数据库表结构 Article ------- Id <--------- Title Slug | Theme | SubTheme | | | Permalink Table | --------------- | PermalinkId | Name | Slug / ArticleId --------- 路线 //normal route for article routes.MapRoute("article","{theme}/{subtheme}/{slug}",new {controller = "article",action = "show" } ); //Permalink route for article //You may want to create a custom route constraint for this,or place at bottom of routes routes.MapRoute("permalinkArticleRoute","{PermaLinkName}",action = "showbypermalink"} ); 调节器 public class ArticleController : Controller { public ArticleRepository ArticleRepository {get; set;} //DI'd or constructor injected public ActionResult Show(Article article) { var article = ArticleRepository.GetBy(article.theme,article.subtheme,article.slug); ArticleViewModel avm = new ArticleViewModel(article); return View(avm); } public ActionResult ShowByPermalink(string PermalinkName) { var article = ArticleRepository.GetBy(PermalinkName); ArticleViewModel avm = new ArticleViewModel(article); return View(avm); } } 模型 public class ArticleRepository { //Uses Linq-to-SQL. Can be adapted for any other ORM. The retrieval logic is the same //It's the actual code that differs public Article GetBy(string theme,string subtheme,string slug) { return (from a in db.Articles where (a.Theme == theme && a.Subtheme == subtheme && a.Slug == slug) select a).FirstOrDefault(); } public Article GetBy(string permalinkName) { return (from a in db.Articles join p in Permalink on permaLink.ArticleId equals a.Id where p.permalinkName == permalinkName select a; } } 允许用户创建永久链接 最后一部分是创建/读取功能,供用户创建永久链接.请注意,从SEO的角度来看这是“不好的”(当多个链接解析到同一页面时会发生稀释),但您可能想要这样做(无论出于何种原因). 对于每种方法,请确保将301重定向(RedirectToAction发出此问题)发布到正确的“当前”URL.如果你不这样做,你将受到搜索神的惩罚. 更新您的永久链接操作以将您重定向到显示操作: public ActionResult ShowByPermalink(string PermalinkName) { var article = ArticleRepository.GetBy(PermalinkName); return RedirectToAction("Show",article); } 现在创建永久链接.这涉及将CR(CRUD)添加到Permalink存储库,就像我们之前在文章中所做的那样. 以下是一些警告: >如果您不使用Url路由{permalinkId} / {permalinkName},则必须具有逻辑以确保所有永久链接都是唯一的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在ASP.NET Core中给上传图片功能添加水印
- asp.net-mvc-4 – MVC 4.0 WebApi应用程序和混合身份验证
- asp.net-mvc-3 – 在MVC 3的浏览器选项卡中打开PDF结果
- asp.net – 超过了JavaScriptSerializer.MaxJsonLength.处理
- asp.net-mvc-3 – MVC3 WebGrid:可以在行/列上使用htmlAtt
- asp.net-mvc – 无法使用Simple Injector为每个请求创建DbC
- mono – 使用Kestrel ASP.NET 5时出现错误的空白屏幕
- 三步快速解决dll冲突问题
- 如何在asp.net C#代码后面的菜单控件中禁用特定菜单项
- asp.net – 在Cookie中存储多个值
- asp.net – 带有requireSSL for cookies的Siteco
- asp.net-mvc-3 – System.Web.Mvc.HtmlHelper’不
- asp.net-mvc – ASP.NET MVC标识:多个登录路径并
- asp.net-mvc – 从另一个区域内的动作渲染局部视
- asp.net-mvc – ASP.NET MVC4 WebApi参数为null
- asp.net – 使用窗口域帐户进行身份验证的Web应用
- asp.net – 跨应用程序的表单身份验证
- ASP.NET CAPTCHA实现
- asp.net – SqlFunctions.StringConvert添加不必
- asp.net – ASP.NET中的“关键字不支持:”错误