Web API获取方法参数中的多个NULL值

问题描述 投票:4回答:5

我在下面有这样的示例代码,使用get方法调用API:

CrudService.getAll("sampleurl/param1/param2/param3");

从该示例中,param1和param2可以是null /空值。发生的事情是,当涉及API控制器时,param3的值转到param1。

即使可能有多个空/空值,如何保持参数的正确值? TIA。

c# .net api get
5个回答
6
投票
CrudService.getAll("sampleurl/param1/param2/param3");

您必须为param1传递一个虚拟值,所以如果param1为空,请将其保留为“param1”。基于空参数的各种可能的呼叫:

  • ("sampleurl/param1/param2/2");
  • ("sampleurl/param1/3/2");
  • ("sampleurl/param1/param2/param3");

因此,当调用转到API时,检查是否存在param1 = param1忽略您必须保留3个值的值,以便在任何情况下匹配API的签名。


4
投票

如果您使用asp API,参数应该像这样发送。

  string url = $"https://example.com/api/controllerName/Action?parms1={value}&parms2={value}";
                                    response = client.GetAsync(url).Result;

如果您使用的是asmx,则应编辑Web服务以处理如下参数:

CrudService.getAll("sampleurl",parm1,parm2,etc..);

我希望这能帮到您。


3
投票

如果选择这样的url结构,则意味着您具有某种层次结构。例如,mysite.com/vehicle/car/mercedes/classc/details/engine可以显示或返回C类梅赛德斯引擎的详细信息。不言而喻,不传输品牌或汽车模型没有意义。

如果要保留此层次结构,则必须公开一个允许您在结构中提及“undefined”类别的URL,如:mysite.com/vehicle/car/brandlesscars/mybrandlessmodel/details/engine

如果您网址的片段代表查询的参数但不是路径序列来访问更详细的部分,那么最好使用包含以下参数的网址:mysite.com/vehicle/details/engine?type=car&brand=mercedes&model=classc


1
投票

您可以显式发送带有参数名称和值的请求,就像Paul的答案并将其应用于您的示例:CrudService.getAll(“http://sampleurl/controller/action?param1=”value“&param2 =”value&param3 = value“);

我希望这能帮到您


0
投票

@Jin Thakur的答案是一种方法,但我这样做了。类似于@Sinan的答案。谢谢大家。

来自JS:

CrudService.getAll("/api/home/monitor/param?param1=&param2=&param3=val1");

来自C#API:

[Route("api/home/monitor/param")]
[HttpGet]
public IHttpActionResult GetSomeValue(string param1, string param2, string param3)
{

//Some Codes

}
© www.soinside.com 2019 - 2024. All rights reserved.