您好,登錄后才能下訂單哦!
在C# AJAX中,跨域請(qǐng)求可能會(huì)導(dǎo)致一些問(wèn)題
在服務(wù)器端,你需要添加CORS支持。對(duì)于ASP.NET Web API,你可以在WebApiConfig.cs
文件中的Register
方法里添加以下代碼:
public static void Register(HttpConfiguration config)
{
// 其他配置...
// 添加CORS支持
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
}
這將允許所有來(lái)源的請(qǐng)求訪問(wèn)你的API。如果你想限制允許的來(lái)源,可以將*
替換為特定的域名。
JSONP是一種跨域數(shù)據(jù)交換的技術(shù)。在服務(wù)器端,你需要支持JSONP響應(yīng)。對(duì)于ASP.NET MVC,你可以創(chuàng)建一個(gè)自定義的ActionResult
類型,如下所示:
public class JsonpResult : JsonResult
{
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
string callback = context.HttpContext.Request["callback"];
if (!string.IsNullOrEmpty(callback))
{
response.ContentType = "application/javascript";
response.Write(string.Format("{0}({1});", callback, JsonConvert.SerializeObject(Data)));
}
else
{
response.ContentType = "application/json";
response.Write(JsonConvert.SerializeObject(Data));
}
}
}
然后,在你的控制器中,你可以像這樣返回JSONP響應(yīng):
public JsonpResult GetData()
{
var data = new { message = "Hello, World!" };
return new JsonpResult { Data = data };
}
你可以在服務(wù)器端創(chuàng)建一個(gè)代理,該代理將接收AJAX請(qǐng)求并將其轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器。這樣,客戶端就可以向同一域的代理發(fā)送請(qǐng)求,而不是直接向目標(biāo)服務(wù)器發(fā)送請(qǐng)求。這可以通過(guò)使用ASP.NET Core的中間件或者其他服務(wù)器端技術(shù)來(lái)實(shí)現(xiàn)。
如果你無(wú)法修改服務(wù)器端代碼,你可以嘗試在客戶端使用第三方庫(kù),如jQuery.ajax()
,并設(shè)置dataType: 'jsonp'
。這將告訴jQuery使用JSONP而不是普通的AJAX請(qǐng)求。
請(qǐng)注意,JSONP只支持GET請(qǐng)求,因此如果你需要發(fā)送POST或其他類型的請(qǐng)求,你需要使用其他解決方案,如CORS或代理服務(wù)器。
總之,你需要選擇適合你的應(yīng)用程序和需求的解決方案。在大多數(shù)情況下,使用CORS是最簡(jiǎn)單和最直接的方法。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。