簡體   English   中英

通過JSON發送數據

[英]Sending data by JSON

我想使用mvc wepApi將JSON從桌面應用程序發送到服務器。 這是我的桌面應用程序代碼,它將數據轉換為JSON並發送。

 private void btnAddUserType_Click(object sender, EventArgs e)
    {
       UserType userType = new UserType();
        userType.UserTypeName = txtUserTypeName.Text;

        string json = JsonConvert.SerializeObject(userType);


        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:3852/api/default1");
        httpWebRequest.ContentType = "text/json";
        httpWebRequest.Method = "POST";

        var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream());
        streamWriter.Write(json);


        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        var streamReader = new StreamReader(httpResponse.GetResponseStream());
        var responseText = streamReader.ReadToEnd();
    }

這是我的網絡API

 // POST api/default1
    public void Post([FromBody]string value)
    {
        UserTypeRepository bl = new UserTypeRepository();
        DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(UserType));
        MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(value));
        UserType u = new UserType();
         u = (UserType)js.ReadObject(stream);
        bl.Add(u);
    }

但是當post api調用時, Value is null 為什么?

        using(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            streamWriter.Write(json);

您既不刷新也不關閉流,因此基本上數據永遠不會到達api。

我的代碼:

Program.cs-控制台應用

class Program
{
    static void Main(string[] args)
    {
        var user = new UserModel {Id = 4, FirstName = "Michael", LastName = "Angelo"};
        var json = JsonConvert.SerializeObject(user);
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:56506/api/Values/");
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";

        using(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            streamWriter.Write(json);



        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        var streamReader = new StreamReader(httpResponse.GetResponseStream());
        var responseText = streamReader.ReadToEnd();
        Console.WriteLine(responseText);
        Console.ReadKey();
    }
}

UserModel.cs-一些數據類

public class UserModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Id { get; set; }
}

ValuesController.cs-模板中的WebApi控制器

public class ValuesController : ApiController
{
    // GET api/values
    public UserModel[] Get()
    {
        return UserProvider.Instance.Get(); // returns some test data
    }

    // GET api/values/5
    public UserModel Get(int id)
    {
        return new UserModel{Id=1,FirstName="John",LastName="Smith"};
    }

    // POST api/values
    public void Post([FromBody]UserModel value)
    {
        if (value == null)  // BREAKPOINT HERE, just to see what's in value
        {
            var x = value;
        }
    }

}

WebApiConfig.cs-默認配置,添加了有關Json的內容,但是沒有它,它可以工作-這樣我就可以在瀏覽器等中輕松測試GET;)

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

結果:

運行控制台應用程序的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM