WCF WebGet UriTemplate用于任何文件路径 [英] WCF WebGet UriTemplate for any file path

查看:75
本文介绍了WCF WebGet UriTemplate用于任何文件路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据本文,我已经使用WCF实现了自托管的本地Web服务器:开发Web 2.0用户使用HTML5,CSS3和JQuery的自托管WCF服务的界面

在现实世界的应用程序中,我发现我需要进行以下修改才能处理到子文件夹的更深层路径.这可以满足我当前的需求,因为我只创建了足够的UriTemplates即可放入6个文件夹.但是,我怀疑必须有一种更优雅的方式来处理此问题,该方法将允许提供任意数量的子文件夹.

我试图用通配符(例如/{*path}/{resource}.{extension})来解决问题,但似乎通配符只允许在路径的最后一段中使用.

任何帮助将不胜感激,



I''ve implemented a self-hosted local web server using WCF as per this article: Developing Web 2.0 User Interface for Self Hosted WCF Services using HTML5, CSS3 and JQuery

In real world applications, I''ve found that I needed to make the following modifications in order to handle deeper pathing to sub-folders. This works for my current needs because I simply created enough UriTemplates to get 6 folders deep. However, I suspect there must be a more elegant way to handle this that will allow any number of sub-folders to be served.

I tried to figure something out with wildcards (e.g. /{*path}/{resource}.{extension}) but it seems wildcards are only permitted in the last segment of the path.

Any help would be appreciated,

Ken

[OperationContract, WebGet(UriTemplate = "/{path}/{resource}.{extension}")]
Stream Links(string path, string resource, string extension);

[OperationContract, WebGet(UriTemplate = "/{path1}/{path2}/{resource}.{extension}")]
Stream Links2(string path1, string path2, string resource, string extension);

[OperationContract, WebGet(UriTemplate = "/{path1}/{path2}/{path3}/{resource}.{extension}")]
Stream Links3(string path1, string path2, string path3, string resource, string extension);

[OperationContract, WebGet(UriTemplate = "/{path1}/{path2}/{path3}/{path4}/{resource}.{extension}")]
Stream Links4(string path1, string path2, string path3, string path4, string resource, string extension);

[OperationContract, WebGet(UriTemplate = "/{path1}/{path2}/{path3}/{path4}/{path5}/{resource}.{extension}")]
Stream Links5(string path1, string path2, string path3, string path4, string path5, string resource, string extension);

[OperationContract, WebGet(UriTemplate = "/{path1}/{path2}/{path3}/{path4}/{path5}/{path6}/{resource}.{extension}")]
Stream Links6(string path1, string path2, string path3, string path4, string path5, string path6, string resource, string extension);





public Stream Links(string path, string resource, string extension) {
    return ...;
}

public Stream Links2(string path1, string path2, string resource, string extension) {
    return Links(Path.Combine(path1, path2), resource, extension);
}

public Stream Links3(string path1, string path2, string path3, string resource, string extension) {
    return Links(Path.Combine(path1, path2, path3), resource, extension);
}

public Stream Links4(string path1, string path2, string path3, string path4, string resource, string extension) {
    return Links(Path.Combine(path1, path2, path3, path4), resource, extension);
}

public Stream Links5(string path1, string path2, string path3, string path4, string path5, string resource, string extension) {
    return Links(Path.Combine(path1, path2, path3, path4, path5), resource, extension);
}

public Stream Links6(string path1, string path2, string path3, string path4, string path5, string path6, string resource, string extension) {
    return Links(Path.Combine(path1, path2, path3, path4, path5, path6), resource, extension);
}

推荐答案

为什么不只使用像这样的东西...

Why not just use something like this...

[OperationContract]
[WebGet(UriTemplate = "{*pathname}")]
public Stream Links(string pathname)
{
    string path = Path.GetDirectoryName(pathname);
    string resource = Path.GetFileNameWithoutExtension(pathname);
    string extension = Path.GetExtension(pathname).TrimStart(''.'');
    return Links(path, resource, extension);
}


这篇关于WCF WebGet UriTemplate用于任何文件路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆