我正在使用web api2在Asp.Net MVC5中创建一个web api。我发了这样的帖子:
public class SmsClientsController : ApiController
{
public void Post(Client client)
{
//Add Client to database
}
}
模型客户端是这样的:
public class Client
{
public int Id { get; set; }
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
public int Role { get; set; }
}
然后我点击按钮点击这个post方法,只需从客户端的javascript中调用,如下所示:
function SendSms() {
var studentData = {
"Username": "Anjin",
"Password": "Pradhan",
"Role": "1"
};
$.ajax({
type: "POST",
url: "http://192.168.0.102/ProductsApp/api/SmsClients",
data: JSON.stringify(studentData),
contentType: "application/json; charset=utf-8",
dataType: "json",
processData: true,
success: function (data, status, jqXHR) {
console.log(data);
console.log(status);
console.log(jqXHR);
alert("success..." + data);
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
但是在回复时它只会提醒空白警报框。当我通过火虫检查控制台时出现错误:
"NetworkError: 405 Method Not Allowed - http://192.168.0.102/ProductsApp/api/SmsClients"
为什么会这样?此Post
方法无效吗?请帮我纠正一下......
答案 0 :(得分:3)
在同一项目中(同一个域名)
url: "http://192.168.0.102/ProductsApp/api/SmsClients",
如果WebAPI和MVC页面都在同一个项目中,我的意思是在同一个域中,那么url应该如下所示 -
url: "/api/values",
在不同的项目(域名)
如果他们在不同的项目中,那么你需要启用cors。要启用cors,请先获取以下nuget。
PM> Install-Package Microsoft.AspNet.WebApi.Cors
然后在WebApiConfig.cs中启用cors -
config.EnableCors();
然后在控制器操作中,您可以放置此属性。确保只允许正确的原点而不是*
[EnableCors("*", "*", "*")]
现在从其他项目中,您可以通过以下方式提出请求 -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
function SendSms() {
var studentData = {
"Username": "Anjin",
"Password": "Pradhan",
"Role": "1"
};
$.ajax({
type: "POST",
url: "http://localhost:23133/api/values",
data: JSON.stringify(studentData),
contentType: "application/json; charset=utf-8",
dataType: "json",
processData: true,
success: function (data, status, jqXHR) {
console.log(data);
console.log(status);
console.log(jqXHR);
alert("success..." + data);
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
</script>
<input type="submit" onclick="SendSms()" value="Click" />
答案 1 :(得分:0)
我不知道您的配置,但默认情况下,网页无法调用除页面来源之外的域上的服务(API)。您很可能只需实施CORS支持。
答案 2 :(得分:0)
在我的本地服务器中使用localhost
更改IP地址(192.168.0.102)