C# 语言 跨域请求的处理技巧

C#阿木 发布于 2025-06-13 16 次阅读


C 跨域请求处理技巧详解

在Web开发中,跨域请求是一个常见的问题。由于浏览器的同源策略,出于安全考虑,浏览器默认不允许从一个域加载另一个域的脚本。这给前后端分离的开发模式带来了挑战。本文将围绕C语言,探讨跨域请求的处理技巧。

跨域请求主要发生在以下几种场景:

1. 前端页面请求后端API数据。
2. 前端页面请求不同域的静态资源。
3. 前端页面请求不同域的第三方服务。

为了解决跨域请求问题,我们可以采用以下几种方法:

1. JSONP(只支持GET请求)。
2. CORS(支持多种请求方法)。
3. 代理服务器。

下面将详细介绍这三种方法在C中的实现。

JSONP

JSONP(JSON with Padding)是一种只支持GET请求的跨域解决方案。它通过动态创建一个``标签,并设置其`src`属性为跨域请求的URL,从而实现跨域请求。

以下是一个使用C实现JSONP的示例:

csharp
using System;
using System.Text;
using System.Web;

public class JsonpController : Controller
{
public ActionResult Index()
{
return View();
}

[HttpPost]
public JsonResult GetJsonpData(string callback)
{
var data = new { name = "张三", age = 20 };
var json = new StringBuilder();
json.AppendFormat("{0}({1})", callback, JsonConvert.SerializeObject(data));
return Json(json.ToString(), JsonRequestBehavior.AllowGet);
}
}

在HTML页面中,可以这样调用:

html

function callback(data) {
console.log(data.name); // 输出:张三
console.log(data.age); // 输出:20
}

CORS

CORS(Cross-Origin Resource Sharing)是一种更为通用的跨域解决方案,支持多种请求方法。在C中,我们可以通过配置Web API或ASP.NET Core项目来启用CORS。

以下是一个使用ASP.NET Core项目启用CORS的示例:

csharp
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddCors(options =>
{
options.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});

app.UseCors("AllowAll");
}
}

在HTML页面中,可以直接发起跨域请求:

html

代理服务器

当JSONP和CORS无法满足需求时,我们可以使用代理服务器来转发请求。在C中,我们可以使用ASP.NET Core创建一个简单的代理服务器。

以下是一个使用ASP.NET Core创建代理服务器的示例:

csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

public class ProxyController : Controller
{
private readonly HttpClient _httpClient;

public ProxyController(HttpClient httpClient)
{
_httpClient = httpClient;
}

public async Task Index()
{
var request = await Request.ReadRequestAsync();
var response = await _httpClient.SendAsync(new HttpRequestMessage(request.Method, Request.Headers.Location.ToString()));
return new CachedContentResult(response.Content, response.Content.Headers.ContentType);
}
}

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
services.AddControllers();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute("default", "{controller=Proxy}/{action=Index}/{id?}");
});
}
}

在HTML页面中,可以这样调用代理服务器:

html

总结

本文介绍了C中处理跨域请求的几种方法,包括JSONP、CORS和代理服务器。在实际开发中,我们可以根据需求选择合适的方法。希望本文能对您有所帮助。