HttpResponseMessage内容

时间:2019-12-27 05:44:03

标签: c# asp.net asp.net-mvc asp.net-core xunit

我正在编写单元测试,并且必须返回响应对象。我能够返回以下响应

var res = new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content = new StringContent(string.Format("{{ 'email':'{0}', 'first_name':'{1}', 'last_name':'{2}', 'id':'{3}' }}", data.Email, data.FirstName, data.LastName, data.Id))
            };

,但现在需要将所有响应都包装在“ data”属性中。对于下面的更新代码

var res = new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content = new StringContent(string.Format("{{'data':{'email':'{0}','first_name':'{1}','last_name':'{2}','id':'{3}'}}}", data.Email, data.FirstName, data.LastName, data.Id))
            };

但出现错误

消息:     System.FormatException:输入字符串的格式不正确。   堆栈跟踪:     StringBuilder.FormatError()     StringBuilder.AppendFormatHelper(IFormatProvider提供程序,字符串格式,ParamsArray args)     String.FormatHelper(IFormatProvider提供程序,字符串格式,ParamsArray args)     String.Format(字符串格式,Object []参数)

enter image description here

不确定这是怎么回事。请帮忙。

4 个答案:

答案 0 :(得分:0)

您可以使用Newtonsoft.Json

using System;
using Newtonsoft.Json;
using System.Text;
using System.IO;

public class Program
{
    public static void Main()
    {
         var data = new
        {
            email = "data@ada.com",
            first_name = "abc",
            last_name = "abc",
            id = 1
        };

        var data1 = new {data};
        var s = new JsonSerializer();
        var sb = new StringBuilder();
        using (var w = new StringWriter(sb))
        {
            s.Serialize(w, data1);
        }
        Console.WriteLine(sb.ToString());
    }
}

答案 1 :(得分:0)

我没有太多时间看,但是你可以试试看吗?

var res = new HttpResponseMessage()
{
    StatusCode = HttpStatusCode.OK,
    Content = new StringContent(string.Format("{{'data':{'email':'{0}','first_name':'{1}','last_name':'{2}','id':'{3}'}}}", data.data.Email, data.data.FirstName, data.data.LastName, data.data.Id))
};

答案 2 :(得分:0)

尝试了很多选择,并在下面结束。

string.Format("{{ 'data': {{ 'email':'{0}', 'first_name':'{1}', 'last_name':'{2}', 'id':'{3}' }} }}", data.Email, data.FirstName, data.LastName, data.Id);

答案 3 :(得分:0)

如果避免序列化,则可以使用c#7.0功能$字符串插值。 使用:

var res = new HttpResponseMessage()
{
    StatusCode = HttpStatusCode.OK,
    Content = new StringContent($"{{ 'data': {{ 'email':'{data.Email}', 'first_name':'{data.FirstName}', 'last_name':'{data.LastName}', 'id':'{data.Id}' }} }}")
};