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