webdav: add trailing slash on directories

Fixes golang/go#29858

Change-Id: I7bd8357a7def7daab1fd6357a888ff4e676a1bee
GitHub-Last-Rev: a6dc776fa3aad595643943dcff88efcf152d6be1
GitHub-Pull-Request: golang/net#32
Reviewed-on: https://go-review.googlesource.com/c/163863
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/webdav/webdav.go b/webdav/webdav.go
index 744d2d5..b04c5dd 100644
--- a/webdav/webdav.go
+++ b/webdav/webdav.go
@@ -556,7 +556,11 @@
 		if err != nil {
 			return err
 		}
-		return mw.write(makePropstatResponse(path.Join(h.Prefix, reqPath), pstats))
+		href := path.Join(h.Prefix, reqPath)
+		if info.IsDir() {
+			href += "/"
+		}
+		return mw.write(makePropstatResponse(href, pstats))
 	}
 
 	walkErr := walkFS(ctx, h.FileSystem, depth, reqPath, fi, walkFn)
diff --git a/webdav/webdav_test.go b/webdav/webdav_test.go
index 46d1bb6..4daa031 100644
--- a/webdav/webdav_test.go
+++ b/webdav/webdav_test.go
@@ -284,7 +284,7 @@
 		wantDisplayName: `こんにちわ世界`,
 	}, {
 		name:            `/Program Files/`,
-		wantHref:        `/Program%20Files`,
+		wantHref:        `/Program%20Files/`,
 		wantDisplayName: `Program Files`,
 	}, {
 		name:            `/go+lang`,