【问题标题】:ASP .NET Webhook ReceiverASP .NET Webhook 接收器
【发布时间】:2017-12-17 08:08:21
【问题描述】:

我正在尝试创建一个将接收包含 json 的 HTTP 帖子的 Web 应用程序。我现在要做的就是表明我可以收到请求。我首先使用 Web API 模板创建了一个 ASP .NET Web 应用程序。我添加了一个控制器来接收帖子:

  public class PostmanController : Controller
{

    [System.Web.Mvc.HttpPost]
    public void Index([FromBody] string request)
    {

        // Create handler class object
        PostmanHandler test = new PostmanHandler();

        // Pass request to the convertjsontoobject method
        test.ConvertJsonToObject(request);

    }
}

正如您在此处看到的,我还在 Models 文件夹中创建了一个处理程序:

public class PostmanHandler
{
 public void ConvertJsonToObject(string s)
    {
        // Deserialize JSON
        var newData = JsonConvert.DeserializeObject<testobject>(s);
    }
}

将 JSON 转换为我制作的类:

public class testobject
{
    public int id { get; set; }
    public string name { get; set; }
}

我正在尝试对此进行测试以查看它是否有效,但是当我发送 POST 请求时,我收到了来自 Postman 的 404 响应。我将它发送到http://localhost:xxxx/api/Postman,我认为它遵循 WebApiConfig 文件中的路由,该文件指出: routeTemplate: "api/{controller}/{id}"

我是否遗漏了某种路由?

【问题讨论】:

    标签: c# asp.net json asp.net-web-api


    【解决方案1】:

    如果你真的在使用 Web API(而不是 MVC),你的控制器应该是 ApiController 的子类(不是控制器)。

    更新:因此,您真的不需要自己处理 JSON 的反序列化。 Web API 将为您做到这一点。您的“请求”参数不应该是“字符串”类型,它实际上应该是您尝试反序列化为的类型

    [HttpPost]
    public void PostObject([FromBody]testobject request)
    {
    
        // Your request object should be deserialized already.
    }
    

    【讨论】:

    • 谢谢!现在反序列化 json 时获取空值异常
    【解决方案2】:

    在你的 URL 中取出 API 并尝试http://localhost:xxxx/Postman。您的控制器 PostmanController 不是 Web API(派生自 Controller 而不是 ApiController 类),因此 /api/{controller}/{id} 的路由模板在这种情况下不正确。

    【讨论】:

    • 谢谢。现在它在“var newData = JsonConvert.DeserializeObject(s);”的处理程序中给了我一个例外说该值不能为空。不过,我在 Postman 的发布请求中包含了一个 ID 和名称
    • 您能否在表单 POST 中包含原始数据?它应该类似于这种格式: {"request": {"id": "1", "name": "john smith"}} 否则,您将在请求参数中得到 null 并得到您刚才描述的错误.
    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2020-10-15
    • 1970-01-01
    • 2023-01-26
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多