C# ASP.NET MVC API发布数据
我在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
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问题,请查看我编辑的帖子