在C#中處理AJAX跨域請求,你可以使用JSONP或CORS(跨源資源共享)來實現。這里分別介紹這兩種方法:
JSONP是一種跨域數據交互的方法,它利用了<script>
標簽的src屬性不受同源策略限制的特點。在C#中,你可以使用System.Web.Script.Serialization
命名空間下的JavaScriptSerializer
類來處理JSONP數據。
首先,你需要在客戶端的AJAX請求中指定JSONP的回調函數名:
$.ajax({
url: "http://example.com/api",
dataType: "jsonp",
data: { key: "value" },
jsonpCallback: "handleResponse",
success: function(response) {
handleResponse(response);
}
});
然后,在C#后端代碼中,創建一個處理JSONP請求的方法:
using System;
using System.Web.Script.Serialization;
public class JsonpHandler
{
public static void RegisterJsonpHandler(HttpServerUtility server)
{
server.MapPath("~/jsonphandler.ashx");
}
public static void ProcessJsonpRequest(HttpContext context)
{
string callback = context.Request["callback"];
JavaScriptSerializer serializer = new JavaScriptSerializer();
string jsonResponse = serializer.Serialize(new
{
key = "value"
});
context.Response.ContentType = "application/javascript";
context.Response.Write($"{callback}({jsonResponse});");
}
}
最后,在Global.asax.cs
中注冊JSONP處理程序:
using System.Web.Http;
public class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// ... 其他配置 ...
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
JsonpHandler.RegisterJsonpHandler(HttpContext.Current.Server);
}
}
CORS是一種更現代、安全的跨域解決方案,它允許服務器通過設置響應頭來指定哪些源可以訪問其資源。在C#中,你可以使用System.Web.Http
命名空間下的EnableCors
屬性來啟用CORS支持。
首先,在WebApiConfig.cs
中啟用CORS支持:
using System.Web.Http;
public class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// ... 其他配置 ...
config.EnableCors();
}
}
然后,在需要允許跨域訪問的控制器方法上添加[EnableCors]
屬性:
using System.Web.Http;
public class MyController : ApiController
{
[EnableCors(origins: "*", headers: "*", methods: "*")]
public IHttpActionResult GetData()
{
return Ok(new
{
key = "value"
});
}
}
這樣,客戶端就可以通過AJAX跨域請求訪問MyController
下的GetData
方法了。