我正在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()
来电?
答案 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;