Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过GET请求将JSON参数传递给MVC控制器_C#_Json_Ajax_Asp.net Mvc_Typescript - Fatal编程技术网

C# 通过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

我试图将GET请求的查询字符串上的一些JSON传递给MVC控制器,但除了
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   
}