有关WebApi的琐碎记录

1、关于Controller:使用方法名或者控制器名作为接口地址

问题:新建的WebApi的项目生成的接口的地址都是以控制器的名字命名的,这样的话,在方法前添加ActionName就不起作用了。

接口代码:

 public class ValuesController : ApiController
    {
        /// <summary>
        /// 接口地址测试
        /// </summary>
        /// <returns></returns>
        [System.Web.Http.ActionName("Rename")]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }

生成的接口地址:

折腾了一番,才想起来ASP.NET中有个叫路由的东西。OK,修改App_Start/WebApiConfig.cs

修改前代码:

routeTemplate: "api/{controller}/{id}",

修改后代码:

routeTemplate: "api/{controller}/{action}/{id}",

修改后的接口地址:

 

 

2、WebAPI的属性和相关操作 FormBody和 FormUri等

(1)FromUri

将数据通过url方式传递。需要在webapi方法标明(一般get方法使用),这个参数只接受url中参数的值。

webapi使用:

// 一般结合Dto使用
public IEnumerable<Person> GetAllPerson([FromUri] GetAllPersonInput input)
{
    return new List<Person>() {
        new Person() {ID="1", Name="Moby",Age=15},
        new Person() {ID="2", Name="Job",Age=15} };
}

// Dto定义
public class GetBaseInput
{
    public string Id { get; set; }
    public string Name { get; set; }
}

// 不用Dto
public IEnumerable<Person> GetAllPerson([FromUri] string Id, [FromUri] string Name)
{
    return new List<Person>() {
        new Person() {ID="1", Name="Moby",Age=15},
        new Person() {ID="2", Name="Job",Age=15} };
}

ajax使用:

$.ajax({
    url: 'http://localhost:21162/api/person/?str1=1&str2=3',
    type: 'Get',
    dataType: 'json',
    success: function (data, textStatus, xhr) {
        console.log(data);
    },
    error: function (xhr, textStatus, errorThrown) {
        console.log('Error in Operation');
    }
});

 

(2)FromBody

结合Post方法,使用和FromUri相似

// 结合Dto使用
[HttpPost]
public IEnumerable<Person> EditPerson([FromBody] PersonDto input)
{
   …………
}

// Dto定义
public class PersonDto
{
    public string Id { get; set; }
    public string Name { get; set; }
    public int Age{ get; set; }
}

 

posted @ 2022-07-15 14:03  暴躁老砚  阅读(27)  评论(0编辑  收藏  举报