w=10=sh IMF sh=11=sh w=12=sh 日期
ASP.NET MVC API Post Data
我在 MVC 中有一个 API。配置如下:
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "API/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我正在为我的 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 错误,上面写着
"Cross-Origin Request Blocked: The Same Origin Policy disallows
reading the remote resource"
我的配置有问题吗?
以下是我对两者所做的测试
$.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);
}
});
编辑:更多测试结果
所以我有预感,我测试了服务如下:
$.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
的 Register
方法中
config.EnableCors(new EnableCorsAttribute("*", "*", "POST"));
所以我们已经达到的解决方案是创建一个复杂的结构,将用户 ID 和密码作为其属性,我们已经改变了这样的方法
public ObjUser UpdateUserPassword(ApiUserParam userParam)
{
ObjUser user = this.userdata.GetUser(userParam.userid);
user.Password = userParam.password;
this.userdata.SaveUser(user);
return user;
}
现在我有一个可用的 Web 服务 Post 并且也完全 restful。
我在 MVC 中有一个 API。配置如下:
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "API/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我正在为我的 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 错误,上面写着
"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource"
我的配置有问题吗?
以下是我对两者所做的测试
$.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);
}
});
编辑:更多测试结果
所以我有预感,我测试了服务如下:
$.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
的Register
方法中
config.EnableCors(new EnableCorsAttribute("*", "*", "POST"));
所以我们已经达到的解决方案是创建一个复杂的结构,将用户 ID 和密码作为其属性,我们已经改变了这样的方法
public ObjUser UpdateUserPassword(ApiUserParam userParam)
{
ObjUser user = this.userdata.GetUser(userParam.userid);
user.Password = userParam.password;
this.userdata.SaveUser(user);
return user;
}
现在我有一个可用的 Web 服务 Post 并且也完全 restful。