C# 角度2/4-Asp Net WebApi中的调用PUT方法发出错误请求(400)
我有一个Angular 4应用程序,需要调用在VisualStudio(asp.net)中创建的WebApi。 “get”方法是可以的,我调用并接收预期的响应,但是当我尝试调用PUT或POST方法时,我总是收到一个错误的请求(400) 我的角度服务:C# 角度2/4-Asp Net WebApi中的调用PUT方法发出错误请求(400),c#,asp.net,angular,asp.net-web-api,C#,Asp.net,Angular,Asp.net Web Api,我有一个Angular 4应用程序,需要调用在VisualStudio(asp.net)中创建的WebApi。 “get”方法是可以的,我调用并接收预期的响应,但是当我尝试调用PUT或POST方法时,我总是收到一个错误的请求(400) 我的角度服务: public AvisoLido(aviso:Aviso) { let headers:Headers = new Headers({'Content-Type': 'application/json'}); let opti
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();
}
}
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);//);
控制器代码:
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();
}
}
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
在这个问题上有人能帮忙吗
非常感谢
[System.Web.Mvc.HttpPost]
应该是:
[System.Web.Http.HttpPost]
下面是一个小型通用示例
[System.Web.Http.HttpPost]
public MyReturnObject PostAndReturnSomething([FromBody]MyInputObject args)
{
return null;
}
您的任何操作都不接受PUT请求。为什么您希望PUT请求工作?您还没有向我们展示
Aviso
的定义,也没有向我们展示实际的原始PUT/POST。错误属性[System.Web.Mvc.HttpPost]
应该是[System.Web.Http.HttpPost]
与其他请求类似,如PUT/PATCH等@12seconds good eye我建议将标题更改为POST,因为您只向我们显示POST方法。格拉纳达,我做了更改,但错误相同。。“加载失败:飞行前的响应具有无效的HTTP状态代码400”在“return null;”(服务器端方法中的任意位置)上放置断点。您找到了吗?是否填充了“args”?另一个提示,使用PostMan发布原始json…暂时从等式中删除angular。