如何使用.net webapi保存对象

Fix*_*xus 3 c# windows-8 windows-runtime asp.net-web-api azure-sql-database

我在.net(我的第一个)中创建了WebAPI.使用这个api从db获取对象,查询db等对我来说很容易.没什么新鲜的

但我想知道如何使用这个webapi保存对象?

我有一个与我的webapi通信的clinet应用程序(平板电脑,手机,PC).从我的应用程序中可以保存用户新闻.现在我需要将其保存在db中.我使用Azure SQL.现在我如何将此对象传递给API,以便我可以保存它?

对于我的应用程序,我使用C#/ XAML对于我的WebAPI,我使用.NET

我正在使用这段代码:

HttpClient httpClient = new HttpClient();
        String u = this.apiUrl + "sd/Localization/insert";
        Uri uri = new Uri(u);
        HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, uri);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何发送对象?我应该序列化吗?如果是,如何通过邮寄发送.

//更新

我已经构建了这个

        HttpClient httpClient = new HttpClient();
        String u = this.apiUrl + "sd/Localization/insert";
        Uri uri = new Uri(u);
        HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, uri);
        httpRequestMessage.Content = new StringContent("{'Name':'Foo', 'Surname':'Bar'}");
        await httpClient.PostAsync(uri, httpRequestMessage.Content);
Run Code Online (Sandbox Code Playgroud)

但在我的API中,变量为null

这是我api的代码

    // POST sd/Localization/insert
    public void Post(string test)
    {
        Console.WriteLine(test);
    }
Run Code Online (Sandbox Code Playgroud)

"test"变量为null.我究竟做错了什么 ?

//更新2

        using (HttpClient httpClient = new HttpClient())
        {
            String u = this.apiUrl + "sd/Localization/insert";
            Uri uri = new Uri(u);
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, uri)
            {
                Method = HttpMethod.Post,
                Content = new StringContent("my own test string")
            };

            await httpClient.PostAsync(uri, request.Content);
        }
Run Code Online (Sandbox Code Playgroud)

路由配置

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "sd/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

在你所有的答案之后我创造了这个,但我仍然在我的api的param上得到null.哪里出错了?

And*_*rpi 6

WebAPI 非常擅长解析发送给它的数据并将其转换为.NET对象.

我不习惯使用带有WebAPI的C#客户端,但我会尝试以下方法:

var client = new HttpClient();
client.PostAsJsonAsync<YourObjectType>("uri", yourObject);
Run Code Online (Sandbox Code Playgroud)

注意:您需要使用System.Net.Http(来自具有相同名称的程序集)以及System.Net.Http.Formatting(也来自具有相同名称的程序集).

  • 我注意到他用windows-8和windows-runtime标记了他的帖子,这意味着他正在编写一个"Windows Store"(以前称为"Metro")应用程序,尽管他没有明确说明.如果是这样,这可能解释了为什么他没有这些方法 - 据我所知,WinRT版本的.NET 4.5不包含`HttpClientExtensions`类(通常在`System.Net.Http.Formatting中)定义`PostAsJsonAsync`的.dll`)(VS不允许你从主.NET类库中添加对库的引用). (2认同)