相关疑难解决方法(0)

将对象的数组传递给webapi

我有一个.net mvc 4 webapi项目,我试图将一个对象数组传递给我的控制器上的方法.

我在这里找到了一些关于需要设置我的对象属性的例子:param1 = whatever¶m2 = bling¶m3 = blah.

但我不知道如何使用它来传递集合.

这是我的方法签名.注意我用[FromUri]属性修饰了参数.

public List<PhoneResult> GetPhoneNumbersByNumbers([FromUri] PhoneRequest[] id)
{
    List<PhoneResult> prs = new List<PhoneResult>();
    foreach (PhoneRequest pr in id)
    {
        prs.Add(PhoneNumberBL.GetSinglePhoneResult(pr.PhoneNumber, pr.RfiDate, pr.FinDate, pr.State));
    }
    return prs;
}
Run Code Online (Sandbox Code Playgroud)

这是我简单的PhoneRequest对象:

public class PhoneRequest
{
    public string PhoneNumber { get; set; }
    public string RfiDate { get; set; }
    public string FinDate { get; set; }
    public string State { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我用来传递的样本:

http://localhost:3610/api/phonenumber/getphonenumbersbynumbers/
   [{"PhoneNumber":"8016667777","RfiDate":"","FinDate":"2012-02-11","State":"UT"},
    {"PhoneNumber":"8018889999","RfiDate":"2012-12-01","FinDate":"","State":"UT"}]
Run Code Online (Sandbox Code Playgroud)

用这个"坏请求"回来

我也尝试过这个

http://localhost:3610/api/phonenumber/getphonenumbersbynumbers?
    id=[{"PhoneNumber":"8016667777","RfiDate":"","FinDate":"2012-02-11","State":"UT"}, …
Run Code Online (Sandbox Code Playgroud)

c# http-get asp.net-web-api

9
推荐指数
2
解决办法
8878
查看次数

MVC WebApi HttpGet具有复杂的对象

我有一个现有的WebApi动作,我想从HttpPost切换到HttpGet.它目前需要一个复杂的对象作为参数.

该模型:

public class BarRequest
{
    [JsonProperty("catid")]
    public int CategoryId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

public class FooController : ApiController
{
    //[HttpPost]
    [HttpGet]
    [ActionName("bar")]
    public void Bar([FromUri] BarRequest request)
    {
        if (request != null)
        {
            // CategoryId should be 123, not 0
            Debug.WriteLine("Category ID :: {0}", request.CategoryId);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在当我发送以下请求时,一切都按预期工作.

GET /foo/bar?CategoryId=123
Run Code Online (Sandbox Code Playgroud)

旧的POST请求也按预期工作.

POST /foo/bar {"catid":123}
Run Code Online (Sandbox Code Playgroud)

但现在我需要以下请求才能工作:

GET /foo/bar?catid=123
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

asp.net json.net deserialization asp.net-web-api

7
推荐指数
1
解决办法
1万
查看次数

在WebApi控制器的GET方法中使用[FromBody]

所以我知道如何使用[FromUri]WebApi[FromBody]控制器的“Post”方法。不用说[FromUri],“Get”方法是不必要的,但很明确,并且效果很好。我的问题是我希望 WebApi 在“Get”方法上解析我的 HttpBody 以填充我的对象参数。像这样...

public IHttpActionResult Get([FromBody]Customer c) {
   if (c is null) {
      // problem :-(
   }
}
Run Code Online (Sandbox Code Playgroud)

首先,让我解释一下我为什么要这样做。这是因为我的“获取”URL 很复杂。我需要在其中包含 JSON 对象。因此,虽然我知道使用 HTTP Body 作为“Get”上的有效负载并不是完美的 REST,但我还是愿意这样做。

其次,对于那些认为我应该将其包含在 URL 中的人……好吧,好吧。但是,请告诉我如何测试,因为我尝试在 URL 上输入 JSON 对象,浏览器引用了它的内容,但即使使用[FromUri]我的“获取”WebApi 控制器方法,我也无法解析它。我也尝试通过 Swagger 卷曲,但同样的问题。

我的 JSON 对象很简单{ "a" : "A", "b" : "B" }

预先感谢您的任何帮助。

c# rest swagger webapi2

6
推荐指数
0
解决办法
2万
查看次数

如何使用route属性绑定WebAPI GET请求中的请求模型?

GET :http://www.Example.com/Api/1/0/Book/Company/0 

[Route("{UserId}/{Category}/books/{BookType}/{Page}")]
        [HttpGet]
        [RequestAuthorization]
         public Response Get(int UserId,string Category, string BookType,int Page )
        {          
            var books= this.contentService.GetUserItems(UserId,Category, BookType, Page)
            return new Response() { Status = ApiStatusCode.Ok, Books = books};
        }
Run Code Online (Sandbox Code Playgroud)

上面的代码对我很有用.

我的问题是可以在GET请求中绑定请求模型吗?

例如,我有一个这样的请求模型

 public class BookbRequestModel
    {
        public int UserId { get; set; }
        public int Category { get; set; }
        public int Page { get; set; }  
        public string BookType { get; set; }       
    }
Run Code Online (Sandbox Code Playgroud)

我想要这样的获取请求

GET :http://www.Example.com/Api/1/0/Book/Company/0 

to bind the data to my request model


[Route("{UserId}/{Category}/books/{BookType}/{Page}")]
        [HttpGet] …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc get asp.net-web-api

5
推荐指数
1
解决办法
7593
查看次数