2010-01-23 9 views
1

간단한 게임을위한 온라인 경쟁을위한 간단한 webapp을 구현해야합니다. Get 요청을 처리하고 그에 응답해야합니다.ASP.NET MVC URl 라우팅 : 처리 방법 Action = 테스트 매개 변수

나는 단지 ASP.Net MVC 응용 프로그램을 사용하여 URL을 처리하도록하겠습니다.

문제는, 내가 처리 할 필요가있는 URL은 다음과 같습니다

http://myDomain.com/bot/?Action=DoThis&Foo=Bar 

내가 시도 :

public ActionResult Index(string Action, string Foo) 
    { 
     if (Action == "DoThis") 
     { 
      return Content("Done"); 
     } 
     else 
     { 
      return Content(Action); 
     } 
    } 

문제는 문자열 작업은 항상 경로의 액션 이름으로 설정됩니다. 난 항상 얻을 : ASP.Net MVC는 Action 매개 변수 입력을 무시하고, 실제 ASP.Net MVC 액션을 사용하는 것 같습니다

Action == "Index" 

.

처리해야하는 URL의 형식을 변경할 수 없기 때문에 매개 변수를 올바르게 검색 할 수있는 방법이 있습니까?

답변

5

잡고 QueryString을, 옛날 방식에서 작업 : 거기에 문이 하나 개 추가 라인

public ActionResult Index(string Foo) 
{ 
    string Action = Request.QueryString["Action"]; 
    if (Action == "DoThis") 
    { 
     return Content("Done"); 
    } 
    else 
    { 
     return Content(Action); 
    } 
} 

경우

string Action = Request.QueryString["Action"]; 

이 그럼 당신은/케이스를 실행할 수 있지만 적은 비용으로 아주 간단한 솔루션입니다.

+0

이것은 좋은 해결책입니다. – jessegavin

+0

니스, 쉽고 예쁜! – Peterdk

0

조치 querystring 매개 변수의 이름을 바꾸는 HttpModule을 작성할 수 있습니다. MVC가 요청을 보류하기 전에 HttpModule이 실행됩니다.

다음은 빠르고 간단한 예입니다. 필자는 매개 변수 이름을 바꾸는 방식이 마음에 들지 않으므로 추측합니다.하지만 아이디어는 얻을 수 있습니다.

public class SeoModule : IHttpModule 
{ 
    public void Dispose() 
    { } 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += OnBeginRequest; 
    } 

    private void OnBeginRequest(object source, EventArgs e) 
    { 
     var application = (HttpApplication)source; 
     HttpContext context = application.Context; 

     if (context.Request.Url.Query.ToLower().Contains("action=")) { 
      context.RewritePath(context.Request.Url.ToString().Replace("action=", "actionx=")); 
     } 
    } 
} 
0

나는 또한 이것을 보았다 SO question. 내가 잘 모르는 행동에 효과가있을 수 있습니다.

0

일반 ASP.Net을 사용하는 방법은 어떻습니까? ASP.NET MVC 귀하의 상황에 도움이되지 않습니다. 그것은 실제로 당신의 방식입니다.