1

我正在使用 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);
        }
    });
}

但在响应时,它只会提醒一个空白的警报框。当我通过fire bug检查控制台时出现错误:

"NetworkError: 405 Method Not Allowed - http://192.168.0.102/ProductsApp/api/SmsClients"

为什么会这样??这个Post方法无效吗。请帮我纠正这个...

4

3 回答 3

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" />
于 2014-01-23T10:35:28.000 回答
0

只需更改 ip 地址 (192.168.0.102) 即可localhost在我的本地服务器上为我工作

于 2014-01-23T07:30:56.417 回答
0

我不知道您的配置,但默认情况下,网页无法调用页面所在域以外的域上的服务 (API)。您很可能只需要实现 CORS 支持。

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

于 2014-01-23T07:18:06.497 回答