【问题标题】:Angular 2/4 - Call PUT Method in a Asp Net WebApi gives Bad Request (400)Angular 2/4 - 在 Asp Net WebApi 中调用 PUT 方法给出错误请求 (400)
【发布时间】: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


【解决方案1】:
[System.Web.Mvc.HttpPost] 

应该是:

    [System.Web.Http.HttpPost]

下面的迷你通用示例

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

【讨论】:

  • 格拉纳达,我做了更改,但错误是一样的。“加载失败localhost:11730/api/Home:预检响应具有无效的 HTTP 状态代码 400”
  • 在“return null;”上放一个断点(在服务器端方法的任何地方。你到那里了吗?是否填充了“args”?另一个提示,使用 PostMan 发布原始 json...暂时从等式中删除角度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 2018-03-13
  • 2015-06-02
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多