2012-01-09 3 views
0

일부 전자 메일 및 GUID가 포함될 URL을 처리해야합니다. 첫 번째 매개 변수가 전자 메일 주소이고 두 번째 매개 변수가 Guid 인 경우 다음과 같은 것입니다.쿼리 문자열 매개 변수에 오류가 발생했습니다.

http://www.myWebSiteurladdress.com/Account/[email protected]?MyId=222DF915-264E-4034-BF26-22EB1165667C

이 들어 나는 아래처럼 내 액션 메소드를 다음

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "RouteABC", // Route name 
     "{controller}/{action}/{mail}/{id}", // URL with parameters 
     new { controller = "Account", action = "MyActionMethod", mail = string.Empty, id = Guid.Empty } // Parameter defaults 
    ); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 
} 

아래로 내 라우팅을 수정했습니다.

public class AccountController : Controller 
    { 
     public ActionResult MyActionMethod(string email, Guid id) 
     { 

      ............ 
     } 

위의 URL로 이동하면 문제가 발생합니다. http://www.myWebSiteurladdress.com/Account/[email protected]?MyId=222DF915-264E-4034-BF26-22EB1165667C 다음 오류가 발생합니다. 내가 여기서 잘못하고있는 아이디어가 있습니까?

파라미터 사전 방법 'System.Web.Mvc.ActionResult MyActionMethod (선택 System.String, System.Guid위한 파라미터'MYID '비 - 널 타입 'System.Guid '에 대한 널 엔트리를 포함) '에서'SmartChartsMVC.Controllers.AccountController '를 선택하십시오. 선택적 매개 변수는 참조 유형, null 입력 가능 유형 또는 선택적 매개 변수로 선언 된 이어야합니다. 매개 변수 이름 : 매개 변수

답변

1

올바른 형식의 URL에 물음표 하나를 사용할 수 있습니다. 경로 부분과 쿼리 문자열을 구분합니다. 따라서 탐색하려는 URL이 유효하지 않습니다.

http://www.myWebSiteurladdress.com/Account/MyActionMethod/[email protected]/222DF915-264E-4034-BF26-22EB1165667C 

는 또한 경로 이름 토큰 액션 매개 변수와 일치하는지 확인하십시오

훨씬 더 현실적인 URL은 다음이 될 수 있습니다. 귀하의 Global.asax 경로 정의에서 당신은 {mail}을 사용했으나 귀하의 행동 인수에서는 email을 매개 변수 이름으로 사용했습니다. 명명 규칙에 일관성이 있는지 확인하십시오.

그리고 당신은 단순히이 같은 URL을하고 싶었 경우 :

다음
http://www.myWebSiteurladdress.com/Account/[email protected]&MyId=222DF915-264E-4034-BF26-22EB1165667C 

기본 경로는 다음과 같은 작업을 호출하기에 충분합니다 당신이 사용자 정의 경로를 추가 할 필요가 없습니다 :

public class AccountController : Controller 
{ 
    public ActionResult MyActionMethod(string myEmail, Guid myId) 
    { 
     ... 
    } 

    ... 
} 
+0

항상 당신이 남자처럼 :) –

관련 문제