Я просто схожу с ума, заставляя работать простой веб-интерфейс, и я очень расстроен, потому что все гораздо сложнее, чем должно быть.
Я создал чрезвычайно простой Web Api (для тестирования), который используется клиентом Angular 6, и я смог заставить его работать, если я сам размещаю его локально, но если я публикую его в своем локальном IIS Win10 (что так будет работать при развертывании на сервере), тогда запрос к Web Api завершится с ошибкой 415 «Неподдерживаемый тип носителя».
Странная вещь в том, что если я сделаю запрос к автономной вкладке сети браузера Web Api (которая работает), это будет совсем не то же самое, что запрос к опубликованной версии IIS.
Это мой метод Web Api:
[HttpPost]
[HttpOptions]
public void Post([FromBody]Credentials cred)
{
string strTest = "I'm doing just nothing";
}
Я должен упомянуть, что мне потребовалось целое утро, чтобы заставить его работать даже самостоятельно, из-за CORS, и ключом было добавление [HttpOptions] в заголовок метода.
Учетные данные класса:
public class Credentials {
public string Username { get; set; }
public string Password { get; set; }
}
Угловой почтовый индекс:
let headers={
headers: new HttpHeaders({
'Accept': 'application/json',
'Content-Type': 'application/json; charset=UTF-8'
})
}
return this.http.post<any>('http://localhost:9810/api/Login', JSON.stringify({username, password}), headers) ...
Информация о вкладке сети при самостоятельном размещении (рабочая):
General:
Request URL: http://localhost:9000/api/Login
Request Method: OPTIONS
Status Code: 204 No Content
Remote Address: [::1]:9000
Referrer Policy: no-referrer-when-downgrade
Response Headers:
Content-Length: 0
Date: Thu, 30 Aug 2018 09:24:50 GMT
Server: Microsoft-HTTPAPI/2.0
Request Headers:
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: es-ES,es;q=0.9,en;q=0.8
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: POST
Connection: keep-alive
Host: localhost:9000
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Информация о вкладке сети при публикации в локальном IIS (НЕ работает):
General:
Request URL: http://localhost:9810/api/Login
Request Method: OPTIONS
Status Code: 415 Unsupported Media Type
Remote Address: [::1]:9810
Referrer Policy: no-referrer-when-downgrade
Response Headers:
Content-Length: 801
Content-Type: application/json; charset=utf-8
Date: Thu, 30 Aug 2018 08:57:58 GMT
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Request Headers:
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: es-ES,es;q=0.9,en;q=0.8
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: POST
Connection: keep-alive
Host: localhost:9810
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Итак, как вы видите, когда Web Api публикуется в IIS, вывод на вкладке сети отличается, а заголовок не поступает.
Я полностью застрял и расстроил своих друзей. Пожалуйста, помогите.
Редактировать 1: я добавляю свой WebApiConfig, где вы можете видеть, что я включаю cors на всякий случай.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("http://localhost:4200", "*", "*");
config.EnableCors(cors);
}
}