Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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# ASP.NET MVC API发布数据_C#_Jquery_Asp.net_Ajax_Asp.net Mvc 4 - Fatal编程技术网

C# ASP.NET MVC API发布数据

C# ASP.NET MVC API发布数据,c#,jquery,asp.net,ajax,asp.net-mvc-4,C#,Jquery,Asp.net,Ajax,Asp.net Mvc 4,我在MVC中有一个API。其配置如下: config.EnableCors(); config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "API/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); $.ajax({ url: 'http://l

我在MVC中有一个API。其配置如下:

config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "API/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
$.ajax({
  url: 'http://localhost:3351/datapi/user/updatepassword/joe.brandt@email.com/somepassword'
  type: 'POST',
  contentType: 'application/json',
  success: function(data) {
    console.log(data);
  }
});
我正在为我的API使用自定义路由来创建restful服务,下面的控制器就是一个例子

[RoutePrefix("datapi/user")]
public class UserController : ApiController
{
    [EnableCors("*", "*", "*")]
    [Route("getuser/{userid}/")]
    [System.Web.Http.HttpGet]
    public ObjUser GetUserObject(string userid)
    {
        ObjUser user = this.userdata.GetUser(userid);
        return user;
    }

    [EnableCors("*", "*", "*")]
    [Route("updatepassword")]
    [System.Web.Http.HttpPost]
    public ObjUser UpdateUserPassword(string userid, string password)
    {
        ObjUser user = this.userdata.GetUser(userid);
        user.Password = password;
        this.userdata.SaveUser(user);
        return user;
    }
}
“getuser”方法工作正常。我在应用程序中获得Json格式的对象

当我使用HttpPost服务updatepassword时,问题就出现了。我试图通过HttpPost发送数据,它给了我一个CORS错误,它说

已阻止跨来源请求:同一来源策略不允许 读取远程资源

我的配置有问题吗

下面是我为这两个项目所做的测试

$.ajax({
  url: 'http://localhost:3351/datapi/user/updatepassword'
  type: 'POST',
  data: {
    userid: 'joe.brandt@email.com',
    password: 'newpassword'
  },
  contentType: 'application/json',
  success: function(data) {
    console.log(data);
  }
});

$.ajax({
  url: 'http://localhost:3351/datapi/user/getuser/joe.brandt@email.com'
  type: 'GET',
  contentType: 'application/json',
  success: function(data) {
    console.log(data);
  }
});
编辑:更多测试结果

因此,我有一种预感,并对服务进行了如下测试:

config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "API/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
$.ajax({
  url: 'http://localhost:3351/datapi/user/updatepassword/joe.brandt@email.com/somepassword'
  type: 'POST',
  contentType: 'application/json',
  success: function(data) {
    console.log(data);
  }
});

这起作用了。但是,如果任何一个输入包含冒号:它会给出一个CORS错误!前进的道路有两条,一条是限制输入:第二条是将其转换为unicode。API是restful的,但其他人建议将Ajax数据中的数据作为有效负载,这是否适用于restful API?

尝试添加以下代码行来注册WebApiConfig.cs的方法

config.EnableCors(new EnableCorsAttribute("*", "*", "POST"));

因此,我们已经达成的解决方案是创建一个复杂的结构,将userid和password作为它的属性,我们已经改变了这样的方法

public ObjUser UpdateUserPassword(ApiUserParam userParam)
{
    ObjUser user = this.userdata.GetUser(userParam.userid);
    user.Password = userParam.password;
    this.userdata.SaveUser(user);
    return user;
}

现在我有了一个使用Post和完全restful的工作web服务。

您在ajax请求中将crossDomain设置为true了吗?试试看,我需要吗?我在MVC中使用EnableCors,getuser运行良好,为什么我认为这不再是CORS问题,请查看我编辑的帖子