2011-12-29 3 views
3

간단한 로그인 양식이 있습니다. ASP.Net MVC에 게시하고 싶습니다. 액션이/Login으로 설정되면 작동하는 것으로 나타났습니다. 하지만 "/ Login/Index"와 같은 작업 이름을 쓰면 실패합니다. 서버는 로그인 페이지로 302를 반환하고 Index()의 POST 버전은 호출되지 않습니다. 왜 이런거야? 컨트롤러 여기이 양식의 요청이 왜 작동하지 않습니까?

<form action="/Login/Index/" method="post"> 

      <label for="username">Username</label> 
      <input type="text" id="username" name="username" maxlength="60" /> 

      <label for="password">Password</label> 
      <input type="password" id="password" name="password" maxlength="20" /> 

      <input type="submit" value="Login" /> 
     </form> 

것 :

public class LoginController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Index(string username, string password) 
     { 
      return null; 
     } 
} 

여기

routes.MapRoute(
       "Default", 
       "{controller}/{action}/{id}", 
       new { controller = "Movie", action = "Index", id = UrlParameter.Optional } 
      ); 

가 해결의 Global.asax에 정의 된 유일한 경로이다 : 여기

는 HTML의 내 웹에서 .Config 내가 가진 loginUrl = "~/로그인"과 나는 "~/Login/Index"일 필요가 없었습니다. 그렇지 않으면 URL에 대한 액세스가 거부되고 다시 로그인 페이지로 리디렉션되었습니다.

+1

다시 작성하지 않고도보기를 변경할 수 있습니까? –

+0

방화범과 같은 것으로 클라이언트 측 활동을 모니터하십시오. 'method'가'post' 인 경우 POST를 수행해야하지만 즉시 다른 것으로 리디렉션 될 수 있습니다. 거기에 단서가있을 수 있습니다. – David

+0

죄송합니다 실제로 실제로 POST가 표시되지만 서버가 302로 로그인하여 응답합니다. 왜 POST 버전의 Index는 호출되지 않습니까? –

답변

0

"/ 로그인/색인"및 "/ 로그인/색인 /"은 별개의 작업입니다. 그 후행을 꺼내면 기대했던대로 작동 할 수 있습니다. 내있는 Web.Config에서 첫 번째 방법

+0

같은 결과가 나타납니다. 맞습니다,하지만 MVC 라우팅이 작동하는 방식 저는 거의 다 다르지 않습니다. –

0

시도 나는 loginUrl="~/Login"을했고 그것은 "~/Login/Index"을 할 필요가 있었다. 익명 액세스가 거부되었으므로 loginURL으로 지정된 URL 이외의 URL은 거부되고 다시 로그인 페이지로 리디렉션됩니다.

1

에 [HttpGet] 추가

관련 문제