【发布时间】:2018-02-27 18:09:17
【问题描述】:
我有一个 Angular 4 应用程序需要调用在 Visual Studio (asp.net) 中创建的 WebApi。 “get”方法没问题,我调用并收到了预期的响应,但是当我尝试调用 PUT 或 POST 方法时,我总是收到 BAD REQUEST (400) 错误。
我的 Angular 服务:
public AvisoLido(aviso:Aviso) {
let headers:Headers = new Headers({'Content-Type': 'application/json'});
let options:RequestOptions = new RequestOptions({method:RequestMethod.Post, headers:headers})
let obj = JSON.stringify(aviso.IdAviso);
console.log(obj);
let url = "http://localhost:11730/api/Home/"
return this.http.post(
url,
obj,
options
)
.map((resposta:Response) => console.log(resposta.json()));
}
控制器代码:
[EnableCors(origins: "http://localhost", headers: "*", methods: "*")]
public class HomeController : ApiController
{
[System.Web.Http.HttpGet]
public List<Aviso> GetAvisos(int idUsuario, string situacao)
{
AvisoBO bo = new AvisoBO();
return bo.ListAvisoPorUsuario(idUsuario);
}
[System.Web.Mvc.HttpPost]
public Aviso PostAviso([FromBody] Aviso obj)
{
return new Aviso();
}
}
WebApiConfig:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {action="*", id = RouteParameter.Optional }
);
config.EnableCors();
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Formatters.Remove(config.Formatters.XmlFormatter);
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);//);
我尝试更改 Angular 服务,传递内容类型“application/x-www-form-urlencoded”而不是 Json 格式,并触发控制器方法,但在这种情况下参数始终为 null。
有人可以帮助解决这个问题吗?
非常感谢!
【问题讨论】:
-
您的所有操作都不接受 PUT 请求。为什么您希望 PUT 请求能够工作?
-
您还没有向我们展示
Aviso的定义是什么,也没有向我们展示实际的原始PUT/POST。 -
错误的属性
[System.Web.Mvc.HttpPost]应该是[System.Web.Http.HttpPost]类似于 PUT/PATCH 等其他请求。 -
@12秒好眼力
-
我建议将标题更改为 POST,因为您只向我们展示了 post 方法。
标签: c# asp.net angular asp.net-web-api