gpt4 book ai didi

asp.net-web-api - Asp.Net Core WebAPI CORS 不工作

转载 作者:行者123 更新时间:2023-12-03 18:02:54 25 4
gpt4 key购买 nike

我正在尝试使用 .Net Core 来实现 WebAPI 服务,但无法设置 CORS 正常工作。

我得到了主应用程序“MainApp”,它将即时生成发票,我想将其作为服务进行推广。这不是一个纯粹的 WebAPI 应用程序。我只想将此 InvoiceController 添加为 WebAPI,并且还有其他 Controller ,例如 HomeController、ProductsController 等...带有 View 和 cshtml。

我得到了单独的 Classic WebForm .Net 应用程序,它将通过 Ajax 调用该 InvoiceGeneration 服务并在网站上显示值。

当我运行我的 ajax 脚本时,我得到了这个著名的 CORS 错误。

enter image description here

这是我的 ajax Get 方法。我放了没有关系xhrFields或不。我什至换了dataType: 'jsonp'它仍然给我同样的错误。

$.ajax({
type: "GET",
url: 'http://localhost:57012/invoice/test/123',
dataType: 'json',
contentType: 'application/json',
success: function (data) {
console.log(data);
},
xhrFields: {
withCredentials: true
}
});

InvoiceController.cs

我的发票服务非常简单...只是一种返回一些 JSON 值的方法。

由于我使用 Policy 和 Claims 来确定安全性,因此我输入了 AllowAnonymous属性。即使我取消了该限制,它仍然不起作用。
public class InvoiceController : Controller
{
[HttpGet]
[AllowAnonymous]
[EnableCors("AllowAll")]
public async Task<IActionResult> Test(string id)
{

return new JsonResult(id);
}
}

Startup.cs

我添加了 AllowAll 策略以允许所有类型的请求。
    public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DbContexts.PJDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("PJConnection")));

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

services.AddMvc()
.AddJsonOptions(o => o.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)
.AddJsonOptions(o => o.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver());

services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()));


services.AddAuthorization(options =>
{
options.AddPolicy(Constants.CONST_POLICY_SUPERADMIN, policy => policy.RequireRole(Constants.CONST_ROLE_SUPERADMIN));
options.AddPolicy(Constants.CONST_POLICY_STUDENT, policy => policy.RequireRole(Constants.CONST_ROLE_STUDENT, Constants.CONST_ROLE_ADMIN, Constants.CONST_ROLE_SUPERADMIN));
});
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IOptions<AppSettings> AppSettings)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}

app.UseStaticFiles();

if (env.IsProduction())
{
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(AppSettings.Value.FilePathToUpload),
RequestPath = new PathString("/Files"),
});
}

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookie",
LoginPath = new PathString("/Account/Login/"),
AccessDeniedPath = new PathString("/Account/Forbidden/"),
AutomaticAuthenticate = true,
AutomaticChallenge = true
});

app.UseCors("AllowAll");
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

这是有趣的部分。

我创建了另一个新的 .Net Core WebAPI 项目并将这个 CORS 设置复制到 Startup.cs 和 InvoiceController 到新项目。 CORS 工作正常,我的 AJAX 可以从新项目调用该方法。

但是我不想制作多个项目,我不能将该 WebAPI 嵌入到现有的 MVC WebApp 项目中吗?

我看过一些教程,它们在同一个项目中并排运行 WebAPI 和 MVC Controller (显然它们在同一个域中。所以,CORS 对他们来说不是问题)。非常混淆。

你们能帮我吗?

附注。此 Html5Rocks教程 js 脚本也不起作用。

在我看来,我认为 JqueryAJAX 脚本没有任何问题。
我得到了另一个纯 WebAPI .Net Core 服务,我设法使用相同的“AllowAll 策略”代码正确设置了 CORS。我可以使用这个简单的 Jquery 脚本从任何跨域网站调用该服务。
$.ajax({
type: "GET",
url: 'http://oakapi/staff/byid/2618',
dataType: 'json',
contentType: 'application/json',
success: function (data) {
console.log(data);
}
});

最佳答案

我认为 service.AddCors() 应该放在 service.AddMvc() 之前。

关于asp.net-web-api - Asp.Net Core WebAPI CORS 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42418892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com