Случай 1
Когда я использую сервисы angular ниже, он выдает мне ошибку ниже (упоминается скриншот) . У меня есть один POST API, и я передаю данные и принимаю их в .net.
Angular Services
Код: Выделить всё
startStopService(data:any,options?:any):Observable{
const headers = new HttpHeaders({
'Content-Type': 'application/json'
});
console.log("data type" , typeof(JSON.stringify(data)))
return this.http.post(this.url+"action",data,{headers});
}

[img]https: //i.sstatic.net/mujt0zDs.png[/img]
Случай 2
Когда я меняю содержимое заголовка в службах Angular Я не получаю ошибку CORS. Однако я получаю еще одну ошибку, которая означает, что «Имя машины недействительно». Несмотря на то, что имя машины передается из web.config из API и имеет точное значение.
Я предполагаю, что при передаче данных из angular в .net API они отправляются в строке JSON. Однако код API не может проанализировать его для правильного формата. Ниже представлены измененные сервисы Angular и скриншот.
Код: Выделить всё
startStopService(data:any,options?:any):Observable{
const headers = new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
});
console.log("data type" , typeof(JSON.stringify(data)))
return this.http.post(this.url+"action",JSON.stringify(data),{headers});
}

Для справки я прикрепил файл webapi.config.cs.
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net;
using System.Threading.Tasks;
using System.Threading;
using System.Web.Http;
using System.Web.Http.Cors;
//using Microsoft.AspNetCore.Cors;
namespace WebApplication1
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.EnableCors(new EnableCorsAttribute("http://localhost:4200", "*", "GET, POST, OPTIONS, PUT, DELETE"));
// Register Preflight Request Handler
config.MessageHandlers.Add(new PreflightRequestsHandler());
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
public class PreflightRequestsHandler : DelegatingHandler
{
protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Options)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add("Access-Control-Allow-Origin", "http://localhost:4200");
response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization");
return Task.FromResult(response);
}
return base.SendAsync(request, cancellationToken);
}
}
}
}
Код: Выделить всё
Примечание. Мой API находится в .net 4.7.2, а Angular — в 17.
Microsoft.aspnet.webapi.core -->5.2.7
Microsoft.aspnet.webapi.cors -->5.2.7
В приведенном выше файле webapiconfig.cs я пробовал использовать только * вместо указанного, и это тоже не сработало.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация и помогите мне.
Подробнее здесь: https://stackoverflow.com/questions/790 ... lar-to-net