ASP.NET MVC - JSONP

Posted on 2013-12-29

之前公司有用到跨網域存取的需求,所以就研究了一下 Jsonp

先來看在 asp.net mvc 的 Jsonp 要怎麼寫

寫一個自定的 JsonpResult 繼承 JsonResult 並且 override ExecuteResult

context.httpContext 去取得 responserequest

如果沒有指定 ContentType ,預設就用 application/json

如果有 callback 的參數就當成是 jsonp,沒有的話就當成一般的 json


Controller 的話就很簡單

最後 new JsonpResult 把傳進來的 tc 當成 data 回傳


先測試一下在網址傳入 tc = 123 是否有正確的返回

多傳入 callback = cashcall 回傳就變成 Jsonp 的格式


不過一般是用 jQuery Ajax 呼叫,所以下面改用 Chrome 的 console 來作測試

先找一個有 jQuery 的網頁,用 jQuery.ajax 來呼叫前面寫好的網頁

會出現 No Access-Control-Allow-Origin 的錯誤

這個時候就改用 jsonp 的方式呼叫

多加入 dataType : "jsonp" 這樣子就可以正確的呼叫到而且不會出錯


下面是執行時的情況

dataType 指定為 jsonp 時,jQuery 會自已產生出 callback


如果要用自定的 callback

只要多傳 jsonp : "callback"jsonpCallback : "cashcall" (自定的 callback 名稱)

callback 就會換成自定義的名稱了


參考連結: