【问题标题】:asp.net httpClient sending json not workingasp.net httpClient发送json不起作用
【发布时间】:2018-04-25 15:35:17
【问题描述】:

我不想将数据从我的一个 asp.net 应用程序发送到另一个。我正在尝试使用 HttpClient 来实现。

我的第一个应用程序:

public class PostVacanciesController : Controller
{
    public myEntity db = new myEntity();
    public const string sendAppURL = "http://localhost:51394/SecondApp/sendData";

    public ActionResult PostTest()
    {
        try
        {
            PostData dataPost = new PostData();

            // Some code to get PostData from database

            var myContent = JsonConvert.SerializeObject(dataPost);
            var buffer = System.Text.Encoding.UTF8.GetBytes(myContent);
            var byteContent = new ByteArrayContent(buffer);
            byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(sendAppURL);
            var result = client.PostAsync("", byteContent).Result;

            return new HttpStatusCodeResult(HttpStatusCode.OK);
        } catch(Exception any)
        {
            return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
        }
    }
}

我的 PostData 模型:

public class PostData
{
    public int PropertyID { get; set; }
    public List<int> Units { get; set; } = null;
}

这是我的第二个应用程序,我尝试获取数据

public class SecondAppController : Controller
{

    [EnableCors(origins: "*", headers: "*", methods: "*")]
    [System.Web.Http.HttpPost]
    public ActionResult sendData(FeedData receiveData)
    { 
        // receiveData variable is wrong.
        // It is showing PropertyID = 0 and Units = null

        return new HttpStatusCodeResult(HttpStatusCode.OK);
    }
}

我的 FeedData 模型:

public class FeedData
{
    public int PropertyID { get; set; }
    public List<int> Units { get; set; } = null;
}

有谁知道它为什么不发送数据?如果我在调用第二个 App 之前创建一个断点,我可以看到它有数据要发送。

谢谢

【问题讨论】:

  • 旁注,为什么将List&lt;int&gt; 初始化为null?这是多余的,因为null 是所有对象的默认值。
  • 为什么使用ByteArrayContent而不是StringContent
  • 伙计们...我开始使用 asp.net,所以我的代码可能不正确。但是,我没有收到任何错误,只是没有发送数据
  • @MaxBoy 确认您在两个项目中使用的 asp.net mvc 版本

标签: asp.net httpclient


【解决方案1】:

更新操作以使用 StringContent,因为您已经在序列化 JSON 字符串。

public const string sendAppURL = "http://localhost:51394/SecondApp/sendData";
static HttpClient client = new HttpClient() {
    BaseAddress = new Uri(sendAppURL)
};

public async Task<ActionResult> PostTest() {
    try {
        PostData dataPost = new PostData();

        // Some code to get PostData from database

        var json = JsonConvert.SerializeObject(dataPost);
        var content = new StringContent(json, Encoding.UTF8, "application/json");
        var response = await client.PostAsync("", content);

        return new HttpStatusCodeResult(response.StatusCode);
    } catch(Exception any) {
        return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
    }
}

注意异步语法的包含。

您需要验证您正在使用的HttpPost 属性,因为第二个控制器具有[System.Web.Http.HttpPost],而它继承自使用[System.Web.Mvc.HttpPost]System.Web.Mvc.Controller

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    相关资源
    最近更新 更多