如何在MVC WEBAPI路由中传递QueryString以获取以下URL

时间:2015-06-04 10:03:59

标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-mvc-routing

我有以下网址。当我通过传递值在浏览器中输入此URL时,我无法访问我的applcation中的api方法。我是MVC的新手。我不确定我们是否可以在MVC WebApi Routing中传递QueryString。如果可能,请帮助在MVC WebAPI路由中传递QueryString。

http://localhost:1665/api/Load/LoadDetails?ID={1}&Latitude={2}&Longitude={3}&Uncertaint
y={4}&Street1={5}&Street2={6}&Neighborhood={7}&Ci&LocationDateTimeUTC={12} 

在routeconfig中,我有以下代码,

       config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}",
            defaults: new { action = "Get" }
        );

        config.Routes.MapHttpRoute(
            name: "DefaultApiId",
            routeTemplate: "api/{controller}/{id:int}",
            defaults: new { id = RouteParameter.Optional }
        );

        ReportsControllerConfiguration.RegisterRoutes(config);
        config.MapHttpAttributeRoutes();

在ApiController中

       [RoutePrefix("Load")]
        public class LoadController : ApiController
        {
        #region RESTful Methods

        [HttpGet]
        [Authorize()]     
        [Route("saveintransitcheckcall/{ID}/{Latitude}/{Longitude}/{Uncertainty}/{Street1}/{Street2}/{Neighborhood}/{City}/{State}/{Postal}/{Country}/")]
        public HttpResponseMessage SaveInTransitCheckCall(int ID)
        {}

请帮助您访问该方法。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果你想通过querystring参数传递参数,如下面的url:

http://localhost:1665/api/Load/LoadDetails?ID={1}&Latitude={2}&Longitude={3}&Uncertaint
y={4}&Street1={5}&Street2={6}&Neighborhood={7}&Ci&LocationDateTimeUTC={12} 

然后使用下面的代码:

[HttpGet]
[Authorize()] 
[Route("saveintransitcheckcall")]
public IHttpActionResult SaveInTransitCheckCall()
{
  var queryString = this.Request.GetQueryNameValuePairs();

  var ID = queryString.SingleOrDefault(x => x.Key == "ID").Value;
  var Latitude = queryString.SingleOrDefault(x => x.Key == "Latitude").Value;
  //read other variables like above


  //do your remaining code here
}

否则你可以使用RESTful方法尝试下面的代码:

[HttpGet]
[Authorize()]     
[Route("saveintransitcheckcall/{ID:int}/{Latitude:decimal}/{Longitude:decimal}/{Uncertainty}/{Street1}/{Street2}/{Neighborhood}/{City}/{State}/{Postal}/{Country}/")]
public HttpResponseMessage SaveInTransitCheckCall(int ID, decimal Latitude, decimal Longitude, string Uncertainty, string Street1, string Street2, string Neighborhood, string City, string State, string Postal, string country)
{
  //do your remaining code here
}

请告诉我,这对你有用吗?