【问题标题】:Making a post in Web Api 2在 Web Api 2 中发帖
【发布时间】:2014-01-23 06:33:32
【问题描述】:

我正在使用 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 方法是否无效。请帮我纠正这个...

【问题讨论】:

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


    【解决方案1】:

    在同一个项目中(同一个域)

    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" />
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        使用localhost 更改 IP 地址 (192.168.0.102) 在我的本地服务器上为我工作

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-17
          • 2015-06-20
          • 1970-01-01
          • 2014-10-27
          • 2015-10-18
          • 1970-01-01
          • 2017-09-29
          • 1970-01-01
          相关资源
          最近更新 更多