2011-12-29 7 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"を持っていました。 "〜/ Login/Index"にする必要がありました。そうしないと、URLへのアクセスが拒否され、ログインページにリダイレクトされました。

+1

再構築せずにビューを変更した可能性はありますか? –

+0

アクティビティをFirebugのようなクライアント側で監視します。 'method'が' post'の場合はPOSTを実行する必要がありますが、すぐに別のものにリダイレクトされる可能性があります。そこに手がかりがあるかもしれません。 – David

+0

申し訳ありません実際には私はPOSTを取得していますが、サーバーはログインに戻る302と応答します。なぜPOSTのバージョンのIndexは呼び出されないのでしょうか? –

答えて

0

"/ Login/Index"と "/ Login/Index /"は異なる動作です。その後ろに/を取り出すと、あなたが期待していたように動作するかもしれません。私はloginUrl="~/Login"を持っていたし、それは"~/Login/Index"にする必要私のWeb.Configで第一の方法

+0

同じ結果が得られます。あなたは正しいのですが、MVCのルーティングの仕組みはここでは違います。 –

0

試してみます。匿名アクセスは拒否されているため、loginURLとして指定されたURL以外のURLは拒否され、ログインページにリダイレクトされます。

1

に[HTTPGET]追加

関連する問題