C# 通过GET请求将JSON参数传递给MVC控制器
我试图将GET请求的查询字符串上的一些JSON传递给MVC控制器,但除了C# 通过GET请求将JSON参数传递给MVC控制器,c#,json,ajax,asp.net-mvc,typescript,C#,Json,Ajax,Asp.net Mvc,Typescript,我试图将GET请求的查询字符串上的一些JSON传递给MVC控制器,但除了null之外,似乎无法让它通过 Ajax(通过TypeScript) MVC控制器 [Route("stuffAndThings/{request?}")] public async Task<HttpResponseMessage> GetStuff(requestType request) { } C#class class requestType { pageData: PageData; } pu
null
之外,似乎无法让它通过
Ajax(通过TypeScript)
MVC控制器
[Route("stuffAndThings/{request?}")]
public async Task<HttpResponseMessage> GetStuff(requestType request)
{
}
C#class
class requestType {
pageData: PageData;
}
public class requestType
{
public PageData pageData { get; set; } = new PageData();
}
查看devtools中的请求,它似乎在querystring上正确传递,但在控制器上总是以null形式传递
我错过了什么
编辑
为了说明几个注释,controller方法纯粹是用于数据检索的,并且将来可能会变成WebAPI方法,因此如果可能的话,我想将其保留为GET请求。Json.Stringfy将您的请求转换为字符串形式,并且在controller中,您将使用特定类型进行获取。因此,要获得正确的结果更新,请使用strin g而不是RequestType 如果你还面临问题,请向我求助。
如果有帮助的话,请回复。在MVC控制器中,您将以字符串形式获取参数,因为您已通过get请求以字符串形式传递参数
[Route("stuffAndThings/{request?}")]
public async Task<HttpResponseMessage> GetStuff(string request)
{
}
可能您需要直接传递PageData,而无需在requestType
JSON中包装。stringify()
表示您传递的是字符串。您的参数需要是字符串请求
(然后反序列化)@StephenMuecke我想您可以将JSON对象作为特定类型直接传递给MVC控制器,而不必将它们作为字符串传递?诚然,我可能错误地使用了JSON.stringify…@HarutyunImirzyan这是我的类的一个简化示例,requestType
类实际上还有几个其他属性,它们也是passed@DarkHippo我认为这是明智的,如果对象是复杂的和/或潜在的不可预测的大小。您经常会发现,如果有很多参数要提交,那么复杂搜索之类的东西就会使用POST,这仅仅是因为请求的复杂性,尽管从语义上讲,它们听起来确实应该是GET。
[Route("stuffAndThings/{request?}")]
public async Task<HttpResponseMessage> GetStuff(string request)
{
}
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(request)))
{
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(requestType));
requestType requestObj = (requestType)deserializer.ReadObject(ms);
//your code here
}