asp.net отправка httpClient json не работает - PullRequest
0 голосов
/ 25 апреля 2018

Я хотел бы отправить данные из одного приложения 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;
}

Кто-нибудь знает, почему он не отправляет данные?Если я создаю точку останова перед вызовом второго приложения, я вижу, что у него есть данные для отправки.

Спасибо

1 Ответ

0 голосов
/ 25 апреля 2018

Обновить действие, чтобы использовать 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.Controller, который использует [System.Web.Mvc.HttpPost]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...