创建Web API以允许使用' /'传递字符串。人物

时间:2015-04-08 14:24:39

标签: c# asp.net asp.net-web-api asp.net-mvc-routing

我正在ASP.NET中创建一个WebApi。我想要一个get方法允许将字符串传递给它。该字符串将作为TFS中分支的路径,我将执行QueryHistory以返回其历史记录。

在我的WebApiConfig.cs文件中:

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

在我的controller.cs文件中:

// GET api/branches/$/Project/Branches/Path/To-This-Branch
public string Get(Uri fullPath)
{
    string output = "";
    NetworkCredential cre = new NetworkCredential("COSMO\\pd-srv", pWord);
    TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://fortknox:8080/tfs/PD"), cre);
    var service = tfs.GetService<VersionControlServer>();

    string s = System.Uri.UnescapeDataString(fullPath);

    var latestChange = service.QueryHistory(s, RecursionType.None, 1);

    //output = JsonConvert.SerializeObject(latestChange);
    //return a json formatted string containing the full history of the branch path passed in
    return "value";
}

我尝试过多种方式,就像当我传入uriEncoded参数时,UnescapeDataString只接受字符串,因此它不起作用。如果我传入字符串,我会因'/'而收到错误。

如何将此路径从我的javascript传递到我的api中的Get()来电?

3 个答案:

答案 0 :(得分:0)

您可以在路径模板的末尾使用{*fullPath}以使用通配符表达式匹配fullPath

config.Routes.MapHttpRoute(
    name: "Branches",
    routeTemplate: "api/branches/{*fullPath}",
    defaults: new { controller = "branches", fullPath = RouteParameter.Optional }
);

请参阅MSDN: Handling a Variable Number of Segments in a URL Pattern

答案 1 :(得分:0)

我过去也遇到过这种情况,并通过将“/”转换为“!”来解决它。然后在API中转换回来。你可以替换那里的任何角色......你只需要摆脱“/”

答案 2 :(得分:0)

尝试调用Get方法:

API /分支FULLPATH =&#34; directory1中/ directory2&#34;