asp.net WebApi 2路由查询字符串json与路由参数

时间:2015-11-04 14:50:22

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

如何实施以下路由方案

http://localhost/vitualdir/prefix/{id}/methodname?{encoded json defenition of object}

使用asp.net webapi 2路由属性? 我的建议是:

首先:将[RoutePrefix("prefix")]添加到控制器

其次:实施以下辩护:

  [Route("~/{id}/methodname")]
  [HttpGet]
  public async Task<IHttpActionResult> methodname([FromUri] JsonObjectFromUri object, int id)
  {

但是那段代码并没有像我想的那样工作。你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

&#39;〜&#39;在Action上指定的Route中,覆盖Route前缀。

尝试删除它。它应该工作。

参考http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#prefixes

例如

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Routing;

namespace MvcApplication2.Controllers
{
    public class TestClass
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    [RoutePrefix("prefix")]
    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [Route("{id}/methodname")]
        public string Get(int id, [FromUri] TestClass objectFromUri)
        {
            return "value";
        }

        // POST api/values
        public void Post([FromBody]string value)
        {
        }

        // PUT api/values/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }
    }
}

现在,如果您将TestClass中的Properties作为url参数传递,WebAPI将自动将它们绑定到objectFromUri对象。

http://localhost:39200/prefix/1/methodname?name=ram&age=10

相关问题