Angular 2/4 - 在Asp Net WebApi中调用PUT方法给出错误请求(400)

时间:2018-02-27 18:09:17

标签: c# asp.net angular asp.net-web-api

我有一个Angular 4应用,需要调用在Visual Studio(asp.net)中创建的WebApi。 "得到"方法是好的,我调用并接收预期的响应,但是当我尝试调用PUT或POST方法时,我总是收到一个BAD REQUEST(400)错误。

我的角色服务:

 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);//);

我尝试更改角色服务,传递内容类型&#34; application / x-www-form-urlencoded&#34;而不是Json格式,并且控制器方法触发,但在这种情况下参数始终为null。

任何人都可以帮忙解决这个问题?

谢谢你!

1 个答案:

答案 0 :(得分:0)

[System.Web.Mvc.HttpPost] 

应该是:

    [System.Web.Http.HttpPost]

下面的迷你通用示例

    [System.Web.Http.HttpPost]
    public MyReturnObject PostAndReturnSomething([FromBody]MyInputObject args)
    {
           return null;
    }