2017-11-17 1 views
0

싱글 사인온 (single sign on) 관리자가 생성 한 URL을 통해 사용되는 사이트 엔트리 컨트롤러가 있습니다. SSO 관리자는 서명하려고하는 시스템의 URL에 식별 매개 변수를 작업 매개 변수로 추가합니다.MVC에서 쿼리 문자열을 수동으로 구문 분석 할 필요없이 url에서 "action"이라는 매개 변수를 추출하는 방법은 무엇입니까?

http://mysite/Entry/SingleSignOn?action=123456789ABCDEFG 

난 그냥 더 나은 경로를 설정할 필요가 있다고 생각,하지만 난 아직 작동시킬 수되지 않은 : 그래서 URL이 SSO 관리자에 의해 생성되는

는 것 같습니다. 난 그냥 쿼리 문자열을 열 분할 할 수 있습니다 알고

public ActionResult SingleSignOn(string action) 
{ 
    // action returns "SingleSignOn" 
    var querystring = Request.Url.Query; //returns "?action=123456789ABCDEFG" 
    return RedirectToAction("Index"); 
} 

하지만 것 : 나는 표준 MVC 바인딩을 통해 URL에서 작업을 얻을 때, 그것은 나에게 액션의 이름을주고,하지 해시 내가 필요 가능한 한 선호하지 마라. 대단히 복잡한 문제는 아니지만 올바른 경로를 찾지 못했습니다.

+0

MVC에 내장 된 라우팅은 쿼리 문자열을 전혀 사용하지 않습니다. 그래서 당신이 달성하고자하는 것은 분명하지 않습니다. SSO가 모든 요청을 다시'/ Entry/SingleSignOn'로 보내면, 그 액션 메소드에서 쿼리 문자열을 파싱해야합니다. 사이트의 여러 위치로 요청을 보낼 수있는 경우 작업 필터를 사용하여 리디렉션을 수행하는 것이 좋습니다. 로그인 후 리디렉션을하는 것은 드문 일이 아니며 라우팅을 사용해야하는 유일한 이유는 SSO에서 보낸 브라우저의 URL을 유지하는 것입니다. – NightOwl888

답변

0

Request.QueryString["action"]을 사용하면 요청 URL에서 명시 적으로 매개 변수 값을 가져올 수 있습니다.

public ActionResult SingleSignOn(string action) 
{ 
    var querystring = Request.QueryString["action"]; 
    // Do something with querystring 
    return RedirectToAction("Index"); 
} 
+0

이것은 올바른 방향으로 나아가는 단계입니다. 수동으로 쿼리 문자열을 구문 분석하는 것보다 확실히 좋습니다. 그러나 나는이 일을 더 잘 할 수있는 길을 만들어야 할 것처럼 보입니다. – MitchelWB

+0

문제는 매개 변수 이름이 프레임 워크에서 사용하는 것과 동일하기 때문입니다. querystring 키를 다른 것으로 변경할 수 있다면 route 매개 변수로 사용할 수 있습니다 (예 :'actionTodo') – Shyju

+0

불행히도 매개 변수 이름을 변경하려면 SSO 관리자를 수정해야합니다. 그런 다음 함께 작업하는 다른 모든 시스템을 수정하고 'action'매개 변수를 예상 한 다음 전체 생태계를 회귀 테스트합니다. 내가 그 길을 가기 전에 Request.QueryString을 사용할 것이다. – MitchelWB

관련 문제