2012-11-21 5 views
5

페이지가로드 될 때 추가/다른 매개 변수가 주소 표시 줄에 표시되도록 컨트롤러에서 현재 url 매개 변수를 변경하는 방법이 있습니까?컨트롤러에서 URL을 변경 하시겠습니까?

여기 무슨 뜻인지, 난 액션 '제품'이 있다고 : product/4545/purple-sunglasses 위, 제품 이름이 실제로 무시되는 함수에 매핑되도록

public ActionResult Product(int productId) 
{ 
    .. 
} 

내가 경로를 매핑을하지만, 내가 원하는, 제품 이름을 지정하지 않으면 제품이 검색 엔진 등을 쉽게에서 얻을 수 있도록, 컨트롤러는이를 추가해야

답변

7

여기 찾아 보게한다 : http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

을 수행하는 방법은 매우 긴 설명이 있습니다를 . 마지막 부분에서는 301 리디렉션에 대해 알려줍니다.이 리디렉션은 검색 엔진 크롤러가 원하는 URL 아래에서 페이지를 찾을 수 있도록 지시해야합니다.

URL 인코딩을 잊지 말고, 일부 작업을 저장하고 고품질 URL을 제공해야합니다.

routes.MapRoute( 
    "ViewProduct", 
    "products/{id}/{productName}", 
    new { controller = "Product", action = "Detail", id = "", productName = "" } 
); 

가 컨트롤러에 이름 부분을 추가하고 올바른 이름 확인 :

는 라우팅을 설정 : 여기

은 블로그 게시물에서 몇 가지 중요한 조각이다
public ActionResult Detail(int id, string productName) 
{ 
    Product product = IProductRepository.Fetch(id); 

    string realTitle = product.Title; // Add encoding here 

    if (realTitle != urlTitle) 
    { 
     Response.Status = "301 Moved Permanently"; 
     Response.StatusCode = 301; 
     Response.AddHeader("Location", "/Products/" + product.Id + "/" + realTitle); // Or use the UrlHelper here 
     Response.End(); 
    } 

    return View(product); 
} 

업데이트
URL이 분명히 손상되었습니다. 이 기사에서는 거의 동일한 기능을 설명합니다 : http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx

의견/새로운 링크를 주신 Stu1986C에게 감사드립니다!

+2

감사합니다. BTW, 링크 된 콘텐츠의 중요한 부분을 게시물에 복사하는 것이 항상 좋은 습관입니다. 내일 링크가 죽으면 사용자가 여전히 답을 얻을 수 있습니다. 또한 더 접근하기 쉬울 것이고 답은 사람들에게 더 잘 보일 것입니다. – Shimmy

+2

링크가 작동하지 않습니다. 다음은 새 질문입니다. http : //www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx – Stu1986C

+0

답변에 대한 새 링크가 추가되었습니다. 감사! –

관련 문제