Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 角度2/4-Asp Net WebApi中的调用PUT方法发出错误请求(400)_C#_Asp.net_Angular_Asp.net Web Api - Fatal编程技术网

C# 角度2/4-Asp Net WebApi中的调用PUT方法发出错误请求(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

我有一个Angular 4应用程序,需要调用在VisualStudio(asp.net)中创建的WebApi。 “get”方法是可以的,我调用并接收预期的响应,但是当我尝试调用PUT或POST方法时,我总是收到一个错误的请求(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();
        }
    }
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。