C# 如何使用接受FromBody参数的API GET方法

C# 如何使用接受FromBody参数的API GET方法,c#,asp.net-web-api2,httpclient,C#,Asp.net Web Api2,Httpclient,如何使用C#中接受一个FromUri参数和第二个FromBody参数的Web API 2 GET命令。我不知道如何在GET命令中发送身体,我需要使用POST命令吗?但是怎么做呢?下面是到目前为止我编写的代码。多谢各位 API代码 [HttpGet] [ResponseType(typeof(IEnumerable<Student>))] public IHttpActionResult Find([FromUri]string searchText,[FromBody]SearchT

如何使用C#中接受一个FromUri参数和第二个FromBody参数的Web API 2 GET命令。我不知道如何在GET命令中发送身体,我需要使用POST命令吗?但是怎么做呢?下面是到目前为止我编写的代码。多谢各位

API代码

[HttpGet]
[ResponseType(typeof(IEnumerable<Student>))]
public IHttpActionResult Find([FromUri]string searchText,[FromBody]SearchType searchType)
{
    //EF code to get data from DB
    using (handler)
    {
        return Ok(handler.Find(searchText, searchType));
    }

}
[HttpGet]
[责任类型(类型(IEnumerable))]
公共IHttpActionResult查找([FromUri]字符串搜索文本,[FromBody]搜索类型搜索类型)
{
//从数据库获取数据的EF代码
使用(处理器)
{
返回Ok(handler.Find(searchText,searchType));
}
}
HttpClient代码

static void Main(string[] args)
{

     HttpClient client = new HttpClient();
     client.BaseAddress = new Uri("http://localhost:55587/");
     client.DefaultRequestHeaders.Accept.Clear();
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

     string aSearchText ="John";
     SearchType aSearchType = SearchType.Name; //this is enum

     Task<HttpResponseMessage> responseTask = client.GetAsync($"api/Student/{aSearchText}");
     responseTask.Wait();

     ////////////////////
     /// Code missing how to send "aSearchType" as a body in Get Command?
     ////////////////////

     var ListTask = responseTask.Content.ReadAsAsync<IEnumerable<Student>>();
     ListTask.Wait();

     IEnumerable<Student> list = ListTask.Result;

     foreach(Student s in list)
     {
         Console.WriteLine(s.Name);
     }
}
static void Main(字符串[]args)
{
HttpClient=新的HttpClient();
client.BaseAddress=新Uri(“http://localhost:55587/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/xml”);
字符串aSearchText=“John”;
SearchType aSearchType=SearchType.Name;//这是枚举
Task responseTask=client.GetAsync($“api/Student/{aSearchText}”);
responseTask.Wait();
////////////////////
///代码缺少如何在Get命令中将“aSearchType”作为主体发送?
////////////////////
var ListTask=responseTask.Content.ReadAsAsync();
ListTask.Wait();
IEnumerable list=ListTask.Result;
foreach(列表中的学生)
{
Console.WriteLine(s.Name);
}
}

您可以将参数从body传递到HttpGet操作,但它不符合逻辑

您可以使用HttpPost从主体发送数据

[HttpPost]
[责任类型(类型(IEnumerable))]
公共IHttpActionResult查找([FromBody]SearchType SearchType,[FromUri]字符串searchText)
{
//从数据库获取数据的EF代码
使用(处理器)
{
返回Ok(handler.Find(searchText,searchType));
}
}
string aSearchText=“John”;
SearchType aSearchType=SearchType.Name//这是enum
Task responseTask=client.postasjssonasync($“api/Student/{aSearchText}”,aSearchType);
responseTask.Wait();

我建议大家阅读。这只是一个肯定的建议。说明书上没有说你不能。它说您不应该这样做。“您不能将参数从body传递到HttpGet操作。”。事实上你可以。规范没有被禁止。这只是建议你不要这样做。我相信弹性搜索在大查询中使用这个原则。任何http方法都可以有消息正文。@XDTTTransform如何从正文发送数据以获取方法?@XDTTTransform感谢您的指导。你可以在编程中做任何事情!但从httpgetRoy中的body发送数据是不符合逻辑的。菲尔丁(又名首先在Http和Rest上签署每个RFC的家伙)主张我们不应该这样做。所以我同意你的看法。他应该使用http Post。