我试图使用MVC生成一个简单的WebDAV服务器,我终于到了需要向用户提供所请求文件的阶段.
我有一个路由设置,处理遍历目录结构"webdav/{*path}"工作正常,直到该路径以文件名结束的点.此时,IIS似乎确定它是静态文件,并尝试从磁盘提供该文件.由于它不在URL中指定的位置,因此返回404错误.
我没有任何更改URL的自由,我基本上需要它在表单中,否则Windows资源管理器无法使用它作为映射驱动器:
GET /webdav/Test/Test2.txt
Run Code Online (Sandbox Code Playgroud)
我已经设置了贪婪匹配的路由,因为目录结构可以有多个级别.我也定了routes.RouteExistingFiles = true;
这是在我的开发机器上使用IIS Express 8.0.
我已经设置了一个空白的MVC项目来测试它,这就是RegisterRoutes方法:
routes.RouteExistingFiles = true;
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "WebDAVGet",
url: "webdav/{*path}",
defaults: new { controller = "WebDAV", action = "Get", path = "" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
所以,要/webdav/Test/Test2在我的控制器中击中断点,但是/webdav/Test/Test2.txt会给我一个404.
有什么建议?
我正在尝试创建一个简单的Web API控制器来充当WebDAV服务器,因为我只希望它允许目录列表和读取文件访问,以及与我们系统中的当前身份验证系统集成.
我已经设法在使用WebDAV客户端(DAVExplorer)时使目录和文件列表工作,但是在Windows资源管理器中映射网络驱动器只是不打球.
虽然我没有弄清楚为什么这不起作用,但有一种可能性是当WebDAV服务器返回PROPFIND请求的结果时,它会使用Http状态代码207多状态.这似乎不在对象HttpStatusCode使用的枚举器中HttpResponseMessage.
我试图找出实际上HttpResponseMessage转换回浏览器的响应,认为我可以实现自己的版本并处理自己输出状态代码,但到目前为止我没有任何运气.
有人建议我如何实现一个返回207状态代码的API控制器?
我正在玩Knockout.js并创建了这个简单的例子:http://jsfiddle.net/JcTxT/30/
<div id="term_grp" data-role="fieldcontain"><a>Semester:</a>
<fieldset id="term_fields" data-role="controlgroup" data-type="horizontal">
<input type="radio" name="term" id="ss" value="ss" data-bind="checked: term" />
<label for="ss">Sommersemester</label>
<input type="radio" name="term" id="ws" value="ws" data-bind="checked: term" />
<label for="ws">Wintersemester</label>
</fieldset>
Term is <span data-bind="text: pommes"></span>
Run Code Online (Sandbox Code Playgroud)
var aResult = {
term: ko.observable("ss"),
pommes: "TEST"
};
$(document).on('pagebeforeshow', '#mainPage', function () {
ko.applyBindings(aResult);
});
Run Code Online (Sandbox Code Playgroud)
我期望检查一个单选按钮(值为"ss"的那个)但事实并非如此.有谁知道,为什么?
干杯