2017-12-05 15 views
0

이 내 제품 ID의 asp.net MVC : 경로

routes.MapRoute(
    "Product", 
    "Product/{productId}", 
    new {controller="Product", action="Details"}, 
    new {productId = @"\d+" } 
); 

에 대한 정수 데이터를 예상 경로 그래서 이러한 경로가 작동 겠지 일치하지 않을 때 우리는 HTTP 상태 코드를 설정할 수

/Product/3 
/Product/8999 

방법 이 시나리오에서 친숙한 오류 메시지를 표시 할 수있는 기존보기로 사용자를 리디렉션 할 수 있습니까?

사용자가 /Product/apple을 입력하고이 경로가 일치하지 않을 때 상태 코드를 설정할 수있는 것이 하나 더 있습니다. 그래서이 경우에는 statusCode="404"을 설정하는 것이 좋습니다. 내가 그것을 할 수있는 경우 customErrors 아래 내가 404 오류에 대한보기가 표시됩니다 지정했습니다. 그것을하는 방법을 제안 해주세요.

<customErrors mode="Off" defaultRedirect="~/error.html"> 
    <error statusCode="403" redirect="~/access-denied.aspx" /> 
    <error statusCode="404" redirect="~/page-not-found.aspx" /> 
    <error statusCode="500" redirect="~/error.html" /> 
</customErrors> 

가능하면 안내해주세요.

+0

을하는 데 도움이

public ActionResult NotFound() { return HttpNotFound(); **// HERE you can redirect to specific html/razor view or static page as you wish** } 

희망'/ 제품/apple'이 요청은 ... 당신의 경로로 두 가지를 현재 일치하지 않습니다 당신은 할 수 있습니다 ... 1. productid regex 구문을 제거하고 그 동작을 처리합니다. 2. 문자열에 일치하는 새로운 경로를 추가하고 해당 동작을 perticular 액션으로 호출합니다. 원하는 페이지로 리디렉션합니다. –

답변

0

현재 나와있는 경로가 요청한 경로와 일치하지 않습니다.

이렇게 두 경로를 추가하는 것을 고려해야합니다. /Product/apple이 공격받을 때

routes.MapRoute(
       "Product", 
       "Product/{productId}", 
       new { controller = "Product", action = "Details" }, 
       new { productId = @"\d+" } 
      ); 
      routes.MapRoute(
       "ProductNotMatched", 
       "Product/{productId}", 
       new { controller = "Product", action = "NotFound" }); 

지금 NotFound 조치를 호출합니다.

다음으로이 작업을 생성하고 다음과 같이 다시 지정할 수

+0

NotFound() 작업이 매개 변수를 취하지 않습니다. productid에 대한. param productid를 꾸미기 위해 당신의 행동을 놓쳤습니까, 아니면 의도적입니까? – Thomas

+0

이'return HttpNotFound();'내 페이지 page-not-found.aspx 파일로 리디렉션되는 HTTP 상태 코드 404를 설정 하시겠습니까? – Thomas

+0

그 의도는'/ Product/apple'입니다. Notfound에서'apple'이 필요 없다고 가정합니다. 필요하다면, 문자열 param을 추가 할 수 있습니다. –