ここにはいくつかのオプションがあります。
まず、リクエストを動詞で区別し、すべてGET
の s が html を受信する一方で、すべてPOST
の s が json を受信するなどの規則を設けます。コントローラーは次のようになります。
[HttpGet]
[ActionName("Index")]
public ActionResult IndexGet()
{
return View();
}
[HttpPost]
[ActionName("Index")]
public ActionResult IndexPost()
{
return Json();
}
そしてもちろん、正しい方法でリクエストを行うのはクライアント側の問題です。更新- ここでは動詞だけでは不十分です - 1 つのアクション名を保持するには、ActionName
属性も使用する必要があります。それを指摘してくれたJoe Enosに感謝します。
2 番目 - パラメータを導入します。デフォルトではhtmlを送信しているとしますが、ajax呼び出しがパラメーターを追加する場合isJson
-json応答を与えます:
public ActionResult Index(bool? isJson)
{
if (isJson.HasValue && isJson.Value)
{
return Json();
}
return View();
}
3 番目 - リクエストの背後にあるメカニズムによってリクエストを区別します。あなたの場合、すべてのajax呼び出し、およびそれらのみがjsonによって提供されるべきであるようです。次に、メソッドを使用できますRequest.IsAjaxRequest()
:
public ActionResult Index()
{
if (Request.IsAjaxRequest())
{
return Json();
}
return View();
}
もちろん、これらのメソッドを組み合わせることも可能です。たとえば、JSON レスポンスを ajax による POST リクエストに対してのみ送信します。