从asp net form到Dto的值

时间:2017-02-20 13:11:16

标签: c# asp.net api

从这篇文章here开始,我要做的是获取aspnet / html表单发送的键值对,然后将它们放入dto中,然后我可以在我的应用程序中的其他地方使用它。我在foreach循环中看到了

public async Task<HttpResponseMessage> PostFormData()
{
if (!Request.Content.IsMimeMultipartContent())
{
    throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}

string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);

try
{
    await Request.Content.ReadAsMultipartAsync(provider);

    // Show all the key-value pairs.
    foreach (var key in provider.FormData.AllKeys)
    {
        foreach (var val in provider.FormData.GetValues(key))
        {
            Trace.WriteLine(string.Format("{0}: {1}", key, val));
        }
    }

您可以阅读这些值并将其发送到traceline。从那里你怎么会把他们变成dto?

继续链接中的示例。我想要

public class trip{
    public string triptype {get; set;}
    public string airports{get; set;}
    DateTime? dates {get; set;}

}

2 个答案:

答案 0 :(得分:1)

我发现你现在已经找到了解决方法,但是使用Web API中内置的默认模型绑定功能,可以采用更简单的方法。

public async Task<HttpResponseMessage> PostFormData(Trip tr)
{
   //do whatever you want here, you've already got a Trip object fully-formed (assuming the data is valid - the first thing you do you should be to check that):
  if (!ModelState.IsValid) {
    //return an error to the client
    return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState);
  }

  //otherwise, carry on and do whatever processing you need
  ///...

  //last thing to do, return a response, something like:
  return Request.CreateResponse(HttpStatusCode.OK, "Your request has been processed");
}

为此,唯一的要求是“Trip”对象的属性名称与从表单提交的名称相匹配。根据你在答案中给出的属性名称来判断,你只需要稍微修改一下Trip对象:

public class Trip {
  public string trip { get; set; }
  public string options { get; set; }
  public string seat { get; set; }
}

如果您不想这样做,请执行相反的操作:修改您提交的HTML表单的“name”属性,以便它们与Trip对象的属性名称匹配。

就是这样 - 无需从表单数据中手动填充对象属性。

答案 1 :(得分:0)

如果有人对如何做到这一点感兴趣我发现对我有用的方式就是这个。我不知道这是不是最好的方法。我知道,由于接收这样的值通常不常用,答案不明确。

     var tr = new Trip
                {
                    Triptype = provider.FormData.GetValues("trip").FirstOrDefault(),
                    Options = provider.FormData.GetValues("options").FirstOrDefault(),
                    Seat = provider.FormData.GetValues("seat").FirstOrDefault(),
            };