[英]asp.net mvc - Rewrite Url after return view
我有這樣的問題。 在RouteConfig.cs中,我設置了路由
routes.MapRoute(
"NewsDetails",
"news/details-news/{title}-{id}",
new { controller = "News", action = "Details", id = "", title = "" }
);
在我的NewsController的Index.cshtml中,我有一個鏈接
@Html.RouteLink(item.Title, "NewsDetails", new {
title = MyWeb.Classes.PrettyUrlHelper.PrettyUrl(item.Title),
id = item.Id
})
在我的NewsController中:
public ActionResult Details(string title,String id)
{
if (id == null && title == null)
return RedirectToAction("Index");
try
{
int ID = Int32.Parse(id);
var result = NewsConnectionDB.GetInstance().Single<LifeStory>(ID);
return View(result);
}
catch (InvalidOperationException) {
return View("~/Views/Error/Error404.cshtml");
}
catch (FormatException) {
return View("~/Views/Error/Error404.cshtml"); }
}
因此,如果用戶單擊“視圖”中的鏈接,則該鏈接將轉至要處理的操作“詳細信息”,並且該鏈接是Seo Url友好的(localhost:9224 / news / details-news / ten-things-2)。 但是用戶鍵入鏈接而不是單擊“視圖”中的鏈接:
localhost:9224/news/details-news/ten-thingsblahblahblah-2
上面的網址使用ID正確,但標題不正確。 因此,如果用戶鍵入了錯誤的標題但輸入了正確的ID,如何在返回View后更新URL?
任何幫助,將不勝感激。
P / S:我的英語不好,所以我希望你能理解。
如果標題不正確,則可以在響應標題中發送正確的url。 如果是ajax調用,則在完成時檢查響應頭中的URL是否正確。 如果存在正確的網址,請使用window.history.pushState
javascript方法更改瀏覽器的網址。
在“ 詳細信息”操作方法中,使用以下代碼設置響應頭。
HttpContext.Current.Response.AppendHeader("CorrectUrl", "YourUrl");
使用HttpServerUtility.UrlEncode(string);
javascript代碼可以替換url,我認為它會起作用:)。
C#代碼
string _entitle = HttpServerUtility.UrlEncode(_strTitle);
string _strCorUrl = "http://example.com/"+ _entitle + "-" + _intID.toString();
腳本代碼
top.window.location.replace('CorrectUrl');
或C#代碼重定向網址
Response.Redirect(url);
使用Context.RewritePath 更新可能的1解決方案
https://msdn.microsoft.com/zh-CN/library/sa5wkk6d(v=vs.110).aspx
void Application_BeginRequest(Object sender, EventArgs e)
{
string originalPath = HttpContext.Current.Request.Path.ToLower();
if (originalPath.Contains("/page1"))
{
Context.RewritePath(originalPath.Replace("/page1", "/RewritePath.aspx?page=page1"));
}
if (originalPath.Contains("/page2"))
{
Context.RewritePath(originalPath.Replace("/page2", "/RewritePath.aspx"), "pathinfo", "page=page2");
}
}
它是示例代碼,可以使用,希望對您有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.