2017-10-10 3 views
0

私のASP.Net(.net 4.7 + MVC5)Webアプリケーションでは、ユーザーを認証した後でエラーになるアクションSearch()があります。HttpPostとAuthorizeによってエラーが発生する: '/'アプリケーションのサーバーエラー。リソースが見つかりません

[Authorize] 
    [Route("Search")] 
    [HttpPost] 
    public ActionResult Search(SearchViewModels passedQuery) 
    { 
     //Action working code here 
     return View("~/Views/Home/Search.cshtml", passedQuery); 
    } 

フォーム送信コードを次のように:

@using (Html.BeginForm("Search", "Home")) 
{ 
    <div class="form-group"> 
     @Html.TextBoxFor(m => m.Content, new { @class = "form-control" })<br /> 
     <button type="submit" class="btn btn-danger">SEARCH</button> 
    </div> 
} 

を私はから[HttpPost]取る場合は、次のよう

Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: /Search

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.7.2106.0

アクションが実装されています。次のようにエラーがありますデバッグモードでは、ユーザーに権限を与えてもアプリケーションは正常に動作します(エラーはスローされません)。しかし、[HttpPost]を使用せずに、コードは本番サーバー上で何もしません。

誰かがを支援することができます:[HttpPost] [Authroize]で使用されている場合、エラーメッセージが表示されるのはなぜ

  • [HttpPost]をいつ、なぜ使うのですか? (私はいくつかの記事とHttpPostとHTTPGETの使用に関する のドキュメントを参照しているが、それでも私は それがliitleハード彼らの
    適切な使用 [1] [2]の概念を把握するために見つけています)

私は非常に新しいですASP.NetとMVCの開発と任意のヘルプは本当に感謝しています。ありがとうございました。

答えて

0

ビューを返します。この行は意味をなさない:正しい使用方法で

return View("~/Views/Home/Search.cshtml", passedQuery); 

、だけではなく、拡張子との完全な仮想パスのビュー名を使用してSearch方法はHomeControllerに属していることを確認してください。

[Authorize] 
public class HomeController : Controller 
{ 
    [HttpPost] 
    public ActionResult Search(SearchViewModels passedQuery) 
    { 
     return View("Search", passedQuery); // or just return View(passedQuery) 
    } 
} 

AuthorizeAttributeには、指定された要件を満たす許可ユーザーがメソッドにアクセスする必要があることに注意してください。既にロードされているフォームを送信している間はPOSTメソッドで設定する必要はありません。ユーザーが認証ロールに基づいて表示するページを要求しているときにコントローラークラスにAuthorizeAttributeを指定し、匿名ユーザーが許可する方法にAllowAnonymousAttributeを設定する必要があります。

が故に、あなたのSearchアクションのペアは、この例のように構築する必要があります

[Authorize] 
public class HomeController : Controller 
{ 
    // other stuff 

    [Route("Search")] 
    [HttpGet] // getting search page request 
    [AllowAnonymous] // allow anonymous users to load search page 
    public ActionResult Search() 
    { 
     return View(); 
    } 

    [HttpPost] // posting content using inserted values on form 
    [AllowAnonymous] // allow anonymous users to load search page 
    public ActionResult Search(SearchViewModels passedQuery) 
    { 
     return View("Search", passedQuery); // or just return View(passedQuery) 
    } 

    // other stuff 
} 
+0

は、ご返信いただきありがとうございます。私はあなたが共有しているテクニックを使用しましたが、それでも同じエラーが投げられました!ビューはこのオブジェクトで処理する必要があるため、パラメータとして(SearchViewModels passedQuery)を渡す必要があります。 SearchViewModelsパラメータを渡さずに[AllowAnonymous]で 'Public ActionResult Search()'を使用すると、ビューはそのパラメータを期待しているため、プログラムはnull例外エラーをスローします。 –

関連する問題