Ответ для предварительной проверки имеет неверный код состояния HTTP 500, говорит

У меня есть веб-API в asp.net 4.5. Я установил пакет nuget для cors и внес соответствующие изменения в код.

in WebApiConfig.cs:

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services
    config.EnableCors();
    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

В контроллере

[EnableCors(origins: "http://localhost:56241/api/loancopy/3219795539", headers: "*", methods: "*")]
[RoutePrefix("api/loancopy")]
public class MainController : ApiController
{
    [HttpPost]
    [Route("{loannumber}")]
    public HttpResponseMessage PostLoanCopy([FromUri]string loanNumber, [FromBody] LoanDto LoanDto)
    {
        return new HttpResponseMessage();
    }
}

Это мой почтовый запрос на стороне клиента в angular2

export class HeroService {
    private heroesUrl = 'http://localhost:56241/api/loancopy/3219795539';
    private body = 'body'
      constructor(private http: Http) { }

    addHero(name: Loan): Observable<Loan> {
        let headers = new Headers({ 'Content-Type': 'application/json' });
        let options = new RequestOptions({ headers: headers });
        return this.http.post(this.heroesUrl, JSON.stringify(Loan), options)
            .map(this.extractData)
            .catch(this.handleError);

    }

Мой клиент говорит, что ответ на предварительную проверку имеет недопустимый код состояния HTTP 500


person Ajith Kumar    schedule 28.10.2016    source источник
comment
Не могли бы вы попробовать использовать только origins: "http://localhost:56241/ для источников и маршрута как [Route("{loanNumber}")]   -  person Developer    schedule 28.10.2016
comment
Это означает, что ваш сервер не смог обработать запрос. Возможно, вам нужно настроить его так, чтобы он правильно отвечал на OPTIONS запросы.   -  person Günter Zöchbauer    schedule 28.10.2016


Ответы (1)


Глядя на ваш код, я предполагаю, что вы следовали эта документация

Мне кажется странным, что URL-адрес, который вызывает ваш клиент, точно совпадает с URL-адресом, объявленным как допустимое происхождение:

Угловой2:

private heroesUrl = 'http://localhost:56241/api/loancopy/3219795539';

WebApiConfig.cs

[EnableCors(origins: "http://localhost:56241/api/loancopy/3219795539", ...

Параметр origins используется, чтобы указать, с каких хостов вы принимаете входящие запросы, и значение, которое вы, по-видимому, используете, это точно тот же хост, на котором запущено приложение .net. Подумайте о том, чтобы изменить его на хост, к которому вы обращаетесь к своему angular2приложению.

Например, если вы запускаете его в localhost на порту 3000, объявление EnableCors должно быть следующим:

[EnableCors(origins: "http://localhost:3000", headers: "*", methods: "*")]

Кроме того, как отметил @Developer, объявление origin не должно содержать путь, а только хост.

Поэтому используйте что-то вроде origins: http://localhost:3000 вместо http://localhost:3000/path/to/angular/page

person fmello    schedule 29.10.2016