在Web Api中发表帖子2

时间:2014-01-23 06:33:33

标签: jquery asp.net-mvc rest asp.net-web-api2

我正在使用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方法无效吗?请帮我纠正一下......

3 个答案:

答案 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支持。

http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx

答案 2 :(得分:0)

在我的本地服务器中使用localhost更改IP地址(192.168.0.102)