У меня есть решение сейчас. Состоит из нескольких изменений:
Я изменил RawContentTypeMapper
, чтобы всегда возвращать WebContentFormat.Raw
Web.config:
Добавлена копия привязки, которая использует RawContentTypeMapper
и удален атрибут contentTypeMapper
. Поэтому он использует сопоставление по умолчанию.
Добавлена конечная точка для каждого адреса («abc / path1» ...) с привязкой, которая использует RawContentTypeMapper.
Добавлена конечная точка к базовому адресу «abc» с привязкой по умолчанию.
IMySourceCode.cs: и MySourceCode.cs:
Сделано новое OperationContract
с UriTemplate = ""
. Там я проверяю HttpContext.Current.Request.PathInfo
для «abc / path1 /», «abc / path2 /» ... и вызываю оригинальные методы OperationContract.
Для этого все OperationContracts должны иметь одинаковую подпись (здесь void MyMethod(Потоковые данные)).
Добавлено Global.asax для перезаписи пути "abc / path1" в "abc / path1 /"...:
protected void Application_BeginRequest(object sender, EventArgs e)
{
var pathInfo = HttpContext.Current.Request.PathInfo.ToLowerInvariant();
if (pathInfo.StartsWith("/abc/"))
{
foreach (var s in new[] { "/abc/path1", "/abc/path2" })
{
if (pathInfo == s)
{
var rawUrl = HttpContext.Current.Request.RawUrl.ToLower(CultureInfo.InvariantCulture);
HttpContext.Current.RewritePath($"{rawUrl}/");
break;
}
}
}
}