0

我在 asp.net 4.5 中有一个 web api。我已经为 cors 安装了 nuget 包并进行了相应的代码更改

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

4

1 回答 1

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

于 2016-10-29T13:50:41.410 回答