2017-10-06 5 views
0

からメソッドを投稿するリダイレクトしようとすると、私は別のポストメソッドからPOSTメソッドにリダイレクトしようとしているが、取得によってリダイレクトしようとしているようだ:

[HttpPost] 
[Route("Users/NewUser")] 
[SystemAuthorize(PermissionForm = Form.USERS, Permissions = PermissionValue.EDIT)] 
public ActionResult NewUser(ConsultUserModel m) //This is called from Consult View by post 
{ 
    Debug.WriteLine("I'm here post"); 
    UserInfoModel model = GetUserInfoModel(); 
    return RedirectToAction("Edit", model); 
} 

[HttpPost] 
[Route("Users/Edit")] 
[SystemAuthorize(PermissionForm = Form.USERS, Permissions = PermissionValue.EDIT)] 
public ActionResult Edit(UserInfoModel edit) 
{ 
    return View(edit); 
} 

私はアクションの結果を呼び出すときサーバーエラー:POSTは意味がないよう先をヒットする

enter image description here

+1

[POST動詞を使用してページにどのようにリダイレクトしますか?](https://stackoverflow.com/questions/129335/how-do-you-redirect-to-a-page-using-the -post-verb) – Diado

+1

"Post"はサーバー上の状態を変更するはずです。誤って使用した場合、POSTによるリダイレクトは危険に思えます。ブラウザによってネイティブにサポートされるべきではありません –

+0

ブラウザはリクエストを受け取ります – arslanaybars

答えて

1

既に言及したように、デザインによって投稿をリダイレクトすることはできません。

今私はあなたの問題への解決策を提案します:

新しいユーザーを作成し、その後、彼らは自分の情報を編集することができる場所にそれらをリダイレクトしているようですが、私には思えます。ランディングアクションは投稿を使う必要はありません。その1つから[HttpPost]を取り除くと、あなたは良いことになるはずです。

[HttpPost]を使用して更新を処理する別の操作を行います。

実際にプロパティを保存する場合は、ユーザー情報をプライベートメソッドに更新し、両方の場所から呼び出すコードを抽象化します。

+0

URLで__RequestVerificationTokenを避けるにはどうすればよいですか? – Dener

+0

__RequestVerificationTokenは、あなたが使用していると仮定したValidateAntiForgeryToken属性で必要です。代わりに、リダイレクトするのではなく 'NewUser'アクションから' Edit'ビューを返すこともできます。 – JuanR

+0

私はすでにそれをやっていますが、不幸にもモデルをビューに渡す必要があります。これは、Viewのドロップダウンを埋めるためにデータベースの一部のデータを管理する責任があるからです。それがURL上でRequestVerificationTokenを取得している理由です。私はモデルからではなくコントローラからこのデータを得ることができます。 – Dener

0

リダイレクト。リダイレクトは、リダイレクト先のリンクを持つブラウザに302レスポンスを返すことによって行われます。ブラウザはあなたが見ているものであるGETを行います。