带有参数的ASP.NET Webapi

时间:2017-05-27 17:10:45

标签: c# asp.net-web-api

我正在构建一个webapi来从Db获取客户的平衡。它运行良好,我可以检索数据。但问题出在参数部分。

例如。在ASP.NET webservice中,当我们请求服务时,它为我们提供了一个页面,根据我们获得的服务,在文本框中输入参数

启动我们获取数据的服务。

我的webapi启动并运行,uri看起来像这样--- http://localhost/api/accounts/balance/cs-001

AccountsController

public class AccountsController : ApiController
{

    [HttpGet]
    [ActionName("balance")]
    public string Getbalance(string accountNumber)
    {
        var data = BusinessLayer.Api.AccountHolderApi.GetBalance(accountNumber);

        return data;
    }

}

我的路线

RouteTable.Routes.MapHttpRoute("OfficeApi", "api/{controller}/{action}/{accountNumber}");

所以accountNumber就是这里的参数。现在我的一个移动应用开发朋友将要使用这个api建议我在参数中移动帐号而不是url.Like在我的情况下我们将参数附加到url中从db中检索余额。我想知道如何将帐号(param)从url webapi中的url移动到参数。

我是webapi的新手。需要帮助。谢谢。

2 个答案:

答案 0 :(得分:2)

您需要做的就是更改路线,因为帐号已经是该功能的参数:

RouteTable.Routes.MapHttpRoute("OfficeApi", "api/{controller}/{action}");

然后你就能做到:

http://localhost/api/accounts/balance?accountNumber=cs-001

答案 1 :(得分:1)

@Avitus的回答是正确的。如果您有兴趣,这里有一些belabor。

如果有人请求此网址:http://localhost/api/accounts/balance?accountNumber=cs-001

ASP.NET路由将根据您的路由配置找出控制器和操作。一旦发现了控制器和动作,它就会尝试绑定动作中的参数,如下所示:

  

默认情况下,Web API使用以下规则绑定参数:

     
      
  1. 如果参数是"简单"类型,Web API尝试从URI中获取值。简单类型包括.NET基元类型(int,bool,double等),以及TimeSpan,DateTime,Guid,decimal和string,以及具有可以从字符串转换的类型转换器的任何类型。 (稍后将详细介绍类型转换器。)
  2.   
  3. 对于复杂类型,Web API尝试使用媒体类型格式化程序从邮件正文中读取值。
  4.   

这是full article