将长参数传递给asp.net webapi

时间:2015-05-19 02:51:21

标签: c# asp.net-mvc

我想将网站参数传递给webapi,但它无法正常工作。

Webapiconfig:

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

Web api控制器:获取参数并返回其他网站的htmlsnapshot

    [HttpGet]
    [Route("api/snapshot/{param}")]
    public string GetSnapShot(string param)
    {

        string fragment = param;
        string content = "";

        if (fragment != null)
        {
            int firstSlash = fragment.IndexOf("/");
            if (firstSlash <= 2)
                fragment = fragment.Substring(firstSlash + 1, fragment.Length - firstSlash - 1);
            using (IWebDriver driver = new PhantomJSDriver())
            {
                string url = String.Format("http://domain.com/{0}", fragment);
                driver.Navigate().GoToUrl(url);

                content = driver.PageSource;
            }
        }
        return content;
    }

如果我尝试api / snapshot / du-lieu - &gt;击中控制器很好,但如果我传递更复杂的

api / snapshot /%2Fdu-lieu%2Fbong-da-y-Serie-A%2Fseason%2F1%2Ftong-quan - &gt;无法工作,返回404

请告知。

2 个答案:

答案 0 :(得分:1)

为什么不把你的param放入查询字符串? 您的代码将成为

[HttpGet]
[Route("api/snapshot")]
public string GetSnapShot(string param1,string param2,string param3)
{
} 

从您调用api的任何地方,创建请求网址 http://<whatever domain you use>/api/snapshot?param1=valueparam1&param2=valueparam2&param3=valueparam3

答案 1 :(得分:0)

  [HttpGet]
        [Route("api/snapshot/{*param}")]
        public string GetSnapShot(string param)
{

}

现在有效,谢谢大家。