Tag: asp.net web api routing

查询string在使用属性路由时不起作用

我正在使用System.Web.Http.RouteAttribute和System.Web.Http.RoutePrefixAttribute来为我的Web API 2应用程序启用更干净的URL。 对于我的大部分请求,我可以使用路由(例如Controller/param1/param2 )或者我可以使用查询string(例如Controller?param1=bob&param2=mary )。 不幸的是,我的一个控制器(也只有一个)失败了。 这是我的控制器: [RoutePrefix("1/Names")] public class NamesController : ApiController { [HttpGet] [Route("{name}/{sport}/{drink}")] public List<int> Get(string name, string sport, string drink) { // Code removed… } [HttpGet] [Route("{name}/{drink}")] public List<int> Get(string name, string drink) { // Code removed… } } 当我请求使用路由时,两者都正常工作。 但是,如果我使用查询string,它会失败,告诉我,该path不存在。 我已经尝试添加以下内容到我的WebApiConfig.cs类的Register(HttpConfiguration config)函数(在Default路由之前和之后),但它什么也没做: config.Routes.MapHttpRoute( name: "NameRoute", routeTemplate: "{verId}/Names/{name}/{sport}/{drink}", defaults: new […]

在ASP.NET Web API中使用可选参数的属性路由

我正在尝试使用Web API 2属性路由来设置自定义API。 我有我的路线工作,以便我的函数被调用,但出于某种原因,我需要传递我的第一个参数,一切工作正常。 以下是我想要支持的url: http://mysite/api/servicename/parameter1 http://mysite/api/servicename/parameter1?parameter2=value2 http://mysite/api/servicename/parameter1?parameter2=value2&parameter3=value3 http://mysite/api/servicename/parameter1?parameter2=value2&parameter3=value3&p4=v4 最后3个URL可以工作,但是第一个URL说:“在控制器的控制器名称上找不到与请求匹配的操作”。 我的控制器看起来像这样: public class MyServiceController : ApiController { [Route("api/servicename/{parameter1}")] [HttpGet] public async Task<ReturnType> Get(string parameter1, DateTime? parameter2, string parameter3 = "", string p4 = "") { // process } }

Web Api属性路由中的可选参数

我想处理以下API调用的POST: /v1/location/deviceid/appid 其他参数来自后身。 这一切都适合我。 现在我想通过允许“deviceid”和/或“appid”和/或BodyData为空来扩展我的代码: /v1/location/deviceid /v1/location/appid /v1/Location/ 这3个url应该以相同的路线回应。 我的第一个方法(BodyData要求): [Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")] public location_fromuser Post(string deviceid = null, string appid = null, [FromBody] location_fromuser BodyData) { return repository.AddNewLocation(deviceid, appid, BodyData); } 这不起作用 – >“可选参数必须在最后”。 接下来尝试: [Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")] public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null) 现在我的函数AddNewLocation()总是得到一个BodyData […]

在ASP.NET Web API中使用多个Get方法进行路由

我正在使用ASP.NET MVC的Web Api,而且我对它很新颖。 我经历了一些在asp.net网站上的演示,我正在尝试做下面的事情。 我有4个get方法,具有以下签名 public List<Customer> Get() { // gets all customer } public List<Customer> GetCustomerByCurrentMonth() { // gets some customer on some logic } public Customer GetCustomerById(string id) { // gets a single customer using id } public Customer GetCustomerByUsername(string username) { // gets a single customer using username } 对于上面的所有方法,我想我的networkingapi有点像如下所示 列表Get()= api/customers/ […]

Post参数始终为空

从WebAPI升级到RC后,我在WebAPI上调用POST时遇到了一些很奇怪的问题。 我甚至回到了在新项目上生成的基本版本。 所以: public void Post(string value) { } 并从小提琴手打电话来: Header: User-Agent: Fiddler Host: localhost:60725 Content-Type: application/json Content-Length: 29 Body: { "value": "test" } 当我debugging时,string“值”永远不会被分配给。 它只是总是NULL。 任何人有这个问题? (我第一次看到更复杂types的问题) 这个问题不仅仅局限于ASP.NET MVC 4,RC安装后新的ASP.NET MVC 3项目也会出现同样的问题

ASP.NET Web API中的自定义方法名称

我正在从WCF Web API转换到新的ASP.NET MVC 4 Web API。 我有一个UsersController,我想有一个名为Authenticate的方法。 我看到如何执行GetAll,GetOne,Post和Delete的例子,但是如果我想向这些服务中添加额外的方法呢? 例如,我的UsersService应该有一个名为Authenticate的方法,在那里它们传递一个用户名和密码,但是它不起作用。 public class UsersController : BaseApiController { public string GetAll() { return "getall!"; } public string Get(int id) { return "get 1! " + id; } public User GetAuthenticate(string userName, string password, string applicationName) { LogWriter.Write(String.Format("Received authenticate request for username {0} and password {1} and application […]

在Web Api中find与请求匹配的多个操作

当我尝试使用2个“Get”方法时,我总是收到这个错误 find与请求匹配的多个操作:webapi 我一直在关于堆栈上的其他类似的问题,但我不明白。 我有2个不同的名称,并使用“HttpGet”属性 [HttpGet] public HttpResponseMessage Summary(MyVm vm) { return null; } [HttpGet] public HttpResponseMessage FullDetails() { return null; }

Web API控制器中的多个HttpPost方法

我开始使用MVC4 Web API项目,我有多个HttpPost方法的控制器。 控制器如下所示: 调节器 public class VTRoutingController : ApiController { [HttpPost] public MyResult Route(MyRequestTemplate routingRequestTemplate) { return null; } [HttpPost] public MyResult TSPRoute(MyRequestTemplate routingRequestTemplate) { return null; } } 这里MyRequestTemplate表示负责处理来自请求的Json的模板类。 错误: 当我使用Fiddler为http://localhost:52370/api/VTRouting/TSPRoute或http://localhost:52370/api/VTRouting/Route ,出现错误: 发现多个与请求匹配的操作 如果我删除上述方法之一,它工作正常。 Global.asax中 我已经尝试修改global.asax的默认路由表,但我仍然收到错误,我想我在global.asax中定义路由有问题。 这是我在做的global.asax。 public static void RegisterRoutes(RouteCollection routes) { routes.MapHttpRoute( name: "MyTSPRoute", routeTemplate: "api/VTRouting/TSPRoute", defaults: new { } ); […]