ASP.NET MVC 라우팅 - 전체 URL과 어떻게 일치합니까?
-
06-07-2019 - |
문제
제휴 문자열이 URL에있을 때 추적 할 수있는 포획 경로를 만들려고합니다. 제휴 코드는 다음으로 표시됩니다 x
그 뒤에 int
, URL의 끝에만 나타납니다 (쿼리 문자열 앞에).
아이디어는 제휴 ID를 추출하고 로깅을 한 다음 제휴 ID없이 동일한 요청을 301로 수행한다는 것입니다.
예를 들어:
http://www.domain.com/x32
http://www.domain.com/x32/
http://www.domain.com/path/to/something/x32
http://www.domain.com/x32?query=string
http://www.domain.com/x32/?query=string
http://www.domain.com/path/to/something/x32?query=string
http://www.domain.com/path/to/something/x32/?query=string
나는이 경로가있다
routes.Add(new Route("{url}/x{affiliateExternalId}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(
new { controller = "Home", action = "LogCookieAndRedirect" }
),
Constraints = new RouteValueDictionary(new { affiliateExternalId = @"\d{1,6}" })
});
일치하는 것만
http://www.domain.com/path/x32
http://www.domain.com/path/x32/
모든 것을 일치시키고 쿼리 문자열을 컨트롤러로 전달하려면 어떻게해야합니까? 이있다 *
내가 사용해야한다고 의심되는 운영자이지만 필요한 것을 할 수는 없습니다.
해결책
{*url}
하나의 세그먼트가 아닌 전체 경로와 일치합니다. 그러나 전체 경로와 일치하기 때문에 마지막에 제휴 ID와 일치 할 수는 없습니다. 경로는 모든 요청과 일치합니다. 경로 제약 조건을 추가하여이를 확인할 수 있습니다. url
마지막에 제휴 ID가 있습니다.
routes.MapRoute(
"WithAffiliate",
"{*url}",
new { controller="Home", action="LogCookieAndRedirect" },
new { url = @"/x[0-9]+$" }
);
그러면 귀하의 조치는 url
매개 변수 자체. URL 구조를 수정할 수있는 옵션이있는 경우 경로 시작 부분에있는 경우 ID와 일치 할 수 있습니다.
routes.MapRoute(
"WithAffiliate",
"x{affiliateExternalId}/{*url}",
new { controller="Home", action="LogCookieAndRedirect" }
);
다른 팁
내가 그것을하고 있다면, 나는 그것을 쿼리 문자열의 값 중 하나로 만들 것입니다.
예시:
http//www.domain.com/path/to/something?affiliate=X32&query=string
문제는 제휴사 ID입니다 선택 과목. 경로에 넣으면 제휴 ID가 있는지 여부에 따라 경로의 구조를 변경하므로 모든 경로를 두 번 수행해야합니다 (한 번은 제휴 ID를 사용하여 한 번). .
제휴하지 않습니다 StackOverflow