预检的响应有无效的HTTP状态代码500说

时间:2016-10-28 02:05:07

标签: asp.net angular asp.net-web-api cors http-options-method

我在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

1 个答案:

答案 0 :(得分:1)

查看您的代码,我认为您遵循了this documentation

我发现您的客户端调用的URL与声明为可接受的源的URL完全相同,这一点很奇怪:

Angular2:

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