Проблема связана с CORS (на стороне сервера) и сигнатурой метода на стороне сервера.
Прежде всего, включите CORS в своем коде API (C #).Поищите в MSDN соответствующие пространства имен / dll (например, System.Web.Cors
).
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.EnableCors();
В классе, производном от контроллера API (например), сделайте это, чтобы убедиться, что CORS разрешен.*
означает, что все URL разрешены.Изменение в соответствии с потребностями вашего клиента (Angular App URI).
/// <summary>
/// Provides API for Order entity.
/// </summary>
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class OrderController : ApiController
{
В CORS отправляется запрос перед полетом с помощью метода OPTIONS
, чтобы сервер мог ответить на вопрос, приемлемо ли его отправлятьзапрос с этими параметрами.Отправляется перед отправкой GET
или POST
.
Возвращаясь к коду API в web.config
, убедитесь, что у вас есть следующее:
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
<remove name="OPTIONSVerbHandler" />
гарантирует, что IIS не перехватывает OPTIONS
запросы.
Также в web.config
выполните следующее.Это позволяет использовать методы GET
, POST
и OPTIONS
.
<httpProtocol>
<customHeaders>
<!--...omitted for brevity-->
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
</customHeaders>
Наконец:
[HttpGet]
public IEnumerable<Person> Get()
{
return SQLiteDataAccess.GetPeople();
}
Нет необходимости делать что-либо с CORS в клиентском кодев угловых.Надеюсь, это поможет.