domain.com/action/id는 물론 domain.com/controller/action도 보유 할 수 있습니까?asp.net mvc routing - 이것이 가능합니까?
경로 표에 어떻게 등록합니까?
domain.com/action/id는 물론 domain.com/controller/action도 보유 할 수 있습니까?asp.net mvc routing - 이것이 가능합니까?
경로 표에 어떻게 등록합니까?
ID는 항상 숫자로 보장됩니까? 예, 당신은 RouteConstraints를 사용할 수있는 경우 :
public class IDConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route,
string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
var value = values[parameterName] as string;
int ID;
return int.TryParse(value,out ID);
}
}
는 기본적으로 무슨 일이 일어나고 있는지 당신이 여기에 두 개의 동일한 루트 가지고있다 - 두 개의 매개 변수를, 그래서 ambigous입니다 :
routes.MapRoute("ActionIDRoute",
"{action}/{id}",
new { controller = "SomeController" },
new {id= new IDConstraint()});
routes.MapRoute("ControllerActionRoute",
"{controller}/{action}",
new {}); // not sure about this last line
IDConstraint 클래스는 다음과 같습니다. 매개 변수에 경로 제한 조건이 적용되어 일치하는지 확인합니다.
그래서 : id 매개 변수 (SomeAction), ASP.net MVC 것에 제약이 있으므로이 두 자리
예, 기본 규칙 위에 새 규칙을 추가하고 컨트롤러에 기본값을 제공 할 수 있습니다.
routes.MapRoute(
"MyRole", // Route name
"{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
샘플은 모든 동작을 "홈"컨트롤러로 전달합니다.
및 domain.com/controller/action 경로를 처리하는 규칙은 무엇입니까? 나는 LogOn actionresult가 정의 된 AccountController를 가지고있다. 그러나 domain.com/account/logon은 라우팅 테이블에 의해 캐치되지 않습니다. – TPR
기본 규칙이 적용됩니다. – AxelEckenberger
글쎄, id는 현재 숫자가 될 것이 확실하지만, 내가 무슨 뜻인지 알면, 프로젝트가 언제 확장되는지 알 수 있습니다. – TPR
@progtick 사실,하지만 그건 문제가 될 수 있습니다. 마찬가지로 귀하의 쟁점은 2 개의 동등한 경로가 있다는 것입니다. 두 개의 경로는 형식이 같고 자리 표시 자의 수가 동일하기 때문에 동일하게 보입니다. 자리 표시 자의 이름은 중요하지 않지만 어떻게 든 구분할 필요가 있습니다. 의미가 항상 다른 경우 (ID는 항상 숫자이며 & Action은 숫자가 아니거나 ID가 항상 i_로 시작하고 & action은 i_로 시작하지 않음) 라우팅 경로 제약 조건은 한 가지 방법입니다. 다른 옵션 : 비슷한 경로가 없도록 경로를 완전히 변경하십시오. –
동의합니다. 나는 이것에 대해 깊이 생각할 것이다. 한편, 귀하의 솔루션을 사용하여 솔루션 나를 위해 작동합니다. – TPR