我已经和CORS问题争了几天了,而且我被困了。我有一个有角度的应用程序试图做一个简单的HTTP Post of Json数据。
我已按照此处所述的路线前进:ASP.NET Web API - CORS Support in ASP.NET Web API 2使用自定义工厂,我已将我的web.config设置为:
<handlers>
<remove name="WebDAV"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
我的$ http帖子:
var serviceEndpoint = "https://mybox/ourservices/myservices/1.0.0.1/api/process";
var requestData ={'FirstName':'Nick','LastName':'Jacobs'};
$http({
method: "POST",
url: serviceEndpoint,
withCredentials: true,
data: requestData,
headers: {
'Content-Type': 'application/json',
'Accept':'application/json'
}
})
.success(function (data, status, headers, config) {
// I need to pick off the user name from the JSON that's returned.
console.log(data);
deferred.resolve(data);
})
.error(function (data, status) {
deferred.reject(data);
});
问题是,我看到了服务器的飞行前请求,它传递了我的来源,并要求适当的标题,但我没有得到任何CORS响应标头。如果我进入web.config并添加允许方法,我确实看到回来了,但是因为我使用withCredentials然后我不能使用通配符起源响应头,我是希望上面MSDN文档中描述的工厂能够解决我的问题。
我缺少什么想法?
谢谢eveyrbody!
答案 0 :(得分:0)
您需要在web api应用程序中配置CORS。 CORS有一个nuget包,基本上它是web api控制器中的一个属性,web api配置类中的一行配置就像config.EnableCors()。无需任何角度配置。 TKS
<强> MenusItemController.cs 强>
[RoutePrefix("api/menus")]
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class MenuItemsController : ApiController
{
[Route("")]
public IHttpActionResult Post()
{
return Ok(new
{
Result = "post menus"
});
}
[Route("")]
public IHttpActionResult Get()
{
return Ok(new
{
Result = "get menus"
});
}
}
<强> WebApiConfig.cs 强>
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.EnableCors();
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Nuget Packages :
我发布了我的应用并且运行良好。我没有做任何配置或角度请求参数。尝试在此处获取或发布:http://www.blocodecodigo.com.br/api/menus。