Как включить Cors в ASP.net Core WebAPIC#

Место общения программистов C#
Ответить
Anonymous
 Как включить Cors в ASP.net Core WebAPI

Сообщение Anonymous »

Что я пытаюсь сделать
У меня есть бэкэндс ASP.net Core Web API, размещенный на бесплатном плане Azure (добавьте заголовки безопасности по умолчанию. Net Core). < /P>
У меня также есть клиент -сайт, который я хочу сделать, потребляет этот API. Клиентское приложение не будет размещено в Azure, а будет размещено на страницах GitHub или в другой службе веб -хостинга, к которой у меня есть доступ. Из -за этого доменные имена не будут выстроены. Он отказывается работать. Я называю API через Ajax в jQuery. Сайт React работает, поэтому я знаю, что это не так. Вызов API JQUERY работает, как я подтвердил в попытке 1. Вот как я делаю звонки < /p>
var apiUrl = "http://andrewgodfroyportfolioapi.azurew ... entication";
//alert(username + "|" + password + "|" + apiUrl);
$.ajax({
url: apiUrl,
type: "POST",
data: {
username: username,
password: password
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var authenticatedUser = JSON.parse(response);
//alert("Data Loaded: " + authenticatedUser);
if (onComplete != null) {
onComplete(authenticatedUser);
}
},
error: function (xhr, status, error) {
//alert(xhr.responseText);
if (onComplete != null) {
onComplete(xhr.responseText);
}
}
});
< /code>

Что я попробовал < /strong> < /p>

< Strong> Попытка 1 - «Правильный путь

https://learn.microsoft.com/en-us/aspne ... urity/cors
Я следовал этому руководству на веб -сайте Microsoft To T, попробовав все 3 варианта включения его во всем мире на startup.cs, установив его на каждом контроллере и пробуя его на каждом действии. < /p >
Следуя этому методу, поперечный домен работает, но только на одном действии на одном контроллере (публикуйте в AccountController). Для всего остального промежуточное программное обеспечение Microsoft.aspnetCore.cors отказывается устанавливать заголовки. .2
Вот как у меня есть настройка в startup.cs
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add Cors
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));

// Add framework services.
services.AddMvc();
services.Configure(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("MyPolicy"));
});

...
...
...
}

// This method gets called by the runtime. Use this method to configure
//the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();

// Enable Cors
app.UseCors("MyPolicy");

//app.UseMvcWithDefaultRoute();
app.UseMvc();

...
...
...
}
< /code>
Как вы можете видеть, я делаю все, как сказано. Я добавляю CORS перед MVC оба раза, и когда это не сработало, я пытался поставить [eNablecors ("mypolicy")] на каждом контроллере как
[Route("api/[controller]")]
[EnableCors("MyPolicy")]
public class AdminController : Controller


Попытка 2 - Брусная заставляя его
https://andrewlock.net /Добавление деко-службы безопасности-управления в in-asp-net-core/
После нескольких часов попытки предыдущей попытки я подумал Заголовки вручную, заставляя их бежать по каждому ответу. Я сделал это следующим образом о том, как вручную добавить заголовки в каждый ответ. < /P>
Это заголовки, которые я добавил < /p>
.AddCustomHeader("Access-Control-Allow-Origin", "*")
.AddCustomHeader("Access-Control-Allow-Methods", "*")
.AddCustomHeader("Access-Control-Allow-Headers", "*")
.AddCustomHeader("Access-Control-Max-Age", "86400")
< /code>
Это другие заголовки, которые я попробовал, которые провалились < /p>
.AddCustomHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE")
.AddCustomHeader("Access-Control-Allow-Headers", "content-type, accept, X-PINGOTHER")
.AddCustomHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Host, User-Agent, Accept, Accept: application/json, application/json, Accept-Language, Accept-Encoding, Access-Control-Request-Method, Access-Control-Request-Headers, Origin, Connection, Content-Type, Content-Type: application/json, Authorization, Connection, Origin, Referer")
< /code>
С помощью этого метода заголовки поперечного сайта применяются должным образом, и они отображаются в моей консоли разработчика и в почтальоне. Проблема, однако, состоит в том, что, хотя он проходит проверку по контролю доступа, ввода-торигин , веб-брузир бросает фиксацию (я верю) в соответствии с головами доступа , заявляя 415 (неподдерживаемый тип носителя ) < /code> < /p>
Таким образом, метод грубого силы не работает и < /p>

Наконец < /strong> < /p>
Кто -нибудь получил это работать и мог протянуть руку или просто указывать мне в правильном направлении? < /p>

edit < /strong> < /p>
Таким образом, чтобы заставить вызовы API пройти, мне пришлось прекратить использование jQuery и переключиться на чистый JavaScript xmlhttprequest < /code> format.
Попытка 1

Я сумел получить microsoft.aspnetcore.cors Работать, следуя ответу MindingData, за исключением метода Configure , размещая app.usecors перед app.usemvc .
Кроме того, когда смешивается с помощью javascript api solution options.allowanyorigin () для поддержки подстановочных знаков также начала работать. > Итак, мне удалось получить попытку 2 (грубое заставив его) работать ... за единственным исключением, что подстановочное значение для контроля Access-Control-allowigin не работает, и поэтому у меня есть вручную установить домены, которые имеют к нему доступ. Это означает, что это начало < /p>
app.UseSecurityHeadersMiddleware(new SecurityHeadersBuilder()
.AddDefaultSecurePolicy()
.AddCustomHeader("Access-Control-Allow-Origin", "http://localhost:3000")
.AddCustomHeader("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, PATCH, DELETE")
.AddCustomHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Content-Type, Authorization"));


Подробнее здесь: https://stackoverflow.com/questions/443 ... ore-webapi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»