【问题标题】:Consuming webapi with two parameters使用带有两个参数的 webapi
【发布时间】:2017-04-04 18:21:58
【问题描述】:

您好,我正在学习 WebApi,遇到了这个问题。数小时的搜索没有找到任何解决方案。

我试图调用一个传递两个参数的 api 只是为了测试目的。我收到 404 错误的是GetBalance(param1, param2)。我有另一个由 Api 公开的函数,名为 GetOffice(param1),其中一个参数返回 200。我得到的 404 用于两个参数函数。

public void GetBalance(string accountNumber,int officeId)
    {
        using (var client = new WebClient())
        {
            client.Headers.Add("Content-Type:application/json");
            client.Headers.Add("Accept:application/json");
            client.Headers.Add("API_KEY","1234CHECK");
            var result = client.DownloadString("http://localhost/api/Accounts/GetBalance/" + accountNumber  + officeId ); //URI 
            Console.WriteLine(Environment.NewLine + result);

        }
    }

static void Main(string[] args)
    {
        ConsumeApiSync objSync = new ConsumeApiSync();
        objSync.GetBalance("01-13-00000595", 1);
    }

路线

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

我得到 404 not found 错误。一定有什么问题?帮助赞赏。谢谢

【问题讨论】:

  • accountNumberofficeId 之间缺少/

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


【解决方案1】:

在包含这两个属性的 Web Api 控制器上使用视图模型。所以而不是:

public HttpresponseMessage  GetBalance(string accountNumber,int officeId)
{
    ...
}

使用:

public HttpresponseMessage Post(ViewModelName model)
{
    ...
}
   var uri = string.Concat("http://localhost/api/Accounts/GetBalance",model);

【讨论】:

  • 谢谢你先生。你能告诉我使用viewmodel的优点吗?
【解决方案2】:

您的请求 URI 似乎不正确。

var uri = string.Concat("http://localhost/api/Accounts/GetBalance/", accountNumber, "/", officeId);

试试下面的代码。

public void GetBalance(string accountNumber,int officeId)
{
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type:application/json");
        client.Headers.Add("Accept:application/json");
        client.Headers.Add("API_KEY","1234CHECK");
        var uri = string.Concat("http://localhost/api/Accounts/GetBalance/", accountNumber, "/", officeId);
        var result = client.DownloadString(uri); //URI 
        Console.WriteLine(Environment.NewLine + result);

    }
}

static void Main(string[] args)
{
    ConsumeApiSync objSync = new ConsumeApiSync();
    objSync.GetBalance("01-13-00000595", 1);
}

【讨论】:

  • 问题与 URI 有关。现在工作。谢谢先生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2018-10-28
相关资源
最近更新 更多