【发布时间】:2015-02-10 12:31:14
【问题描述】:
我有一些角度试图发布到 Web API。 我以前有这个工作,但不断遇到 CORS 问题。
我已将其放入 global.asax
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
这是 API 控制器操作签名:
public void Post([FromBody]Message message)
[FromUri] 和 [FromBody] 都不起作用
我试过了:
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
在 WebApiConfig.cs 中,同时删除 asax 文件中的 Application_BeginRequest 代码,我得到相同的消息: 405(不允许的方法)
和控制器:
public class MessagingController : ApiController
{
private IMessagingRepository DataRepository;
public MessagingController()
{
DataRepository = new DataRepositoryFactory().GetMessagingInstance();
}
public List<Message> Get([FromUri]MessageGetModel model)
{
var result = DataRepository.GetMessages(model.FromId, model.ToId);
return result;
}
public Message Get(string messageId)
{
var result = DataRepository.GetMessage(messageId);
return result;
}
public void Post([FromUri]Message message)
{
message.Id = ObjectId.GenerateNewId().ToString();
DataRepository.GetDataRepository().Save(message);
DataRepository.PostOrUpdateThread(message);
}
}
【问题讨论】:
-
你能发布你的控制器吗?
-
按要求 - 控制器
-
FromUri 在 POST 上看起来很奇怪,我认为应该是 [FromBody]
-
没关系,还是应该调用action,模型会以null的形式出现
-
您确定型号和您发送的内容正确吗?
标签: c# asp.net angularjs asp.net-web-api cors