이름에 하이픈이있는 쿼리 문자열 매개 변수를 만드는 타사 소프트웨어를 사용하고 있습니다. this SO question을 살펴 보았습니다. 솔루션이 내가 필요한 것에 매우 가깝지만, 기본 MVC에 너무 무지하여 필요한 것을 수행하는 방법을 알 수 없었습니다. 이상적으로는 하이픈을 밑줄로 바꾸기 만하면 충분합니다. 더 좋은 것이 있다면, 나는 그것을 듣는 데 관심이 있습니다. 이 컨트롤러와이름에 하이픈을 사용하여 MVC2 변수 처리
http://localhost/app/Person/List?First-Name=Bob&My-Age=3
: 그래서 생성되는
public ActionResult List(string First_Name, int My_Age)
{
{...}
}
가 나는 쿼리 문자열을 변경할 수 없습니다, 반복 내가 그것을 지원해야
내가 처리하고자하는 URL의 예는 이것이다 내 컨트롤러와 어떻게 든. 그러나 어떻게?
참고로은 아래 우리는 내가 원하는 것을 달성하기 위해 수정할 수 있습니다 내가 그 위에 언급 된 SO 질문에서 컨트롤러 이름과 액션 이름에 밑줄을 처리하는 데 사용되는 사용자 정의 RouteHandler입니다 :
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
return base.GetHttpHandler(requestContext);
}
}
실제로 요소가 이미 존재하므로 예외가 발생하는 ActionParameters를 추가하는 대신 값을 설정할 수 있습니다. 'filterContext.ActionParameters [k. ('-', '_')] = filterContext.HttpContext.Request.QueryString [k]; ' –
흥미로운 아이디어, @ 다린. 나는 내가 더 좋아하는 길을 확신하지 못한다. –
좋아하는 문제가 아니므로 메서드의 인수 이름에서 오는'ActionParameters' 컬렉션에 이미'First_Name' 매개 변수가 있으므로 코드가 예외를 throw합니다. –