Похоже, что лучший способ справиться с этой проблемой - это пользовательские Httphandlers. Я использовал пример, найденный в Chris Hammonds Article для базовой линии.
Основная идея заключается в том, что вам нужно создать пользовательский обработчик HTTP:
<system.webServer>
<handlers>
<add name="DnnWebServicesGetHandler" verb="*" path="svc/*" type="Your.Namespace.Handler, YourAssembly" preCondition="integratedMode" />
</handlers>
</system.webServer>
Вы также нуждаетесь конфигурации устаревших обработчика:
<system.web>
<httpHandlers>
<add verb="*" path="svc/*" type="Your.Namespace.Handler, YourAssembly" />
</httpHandlers>
</system.web>
Сам обработчик очень прост. Вы используете URL-адрес запроса и параметры для вывода необходимой логики. В этом случае я использовал Json.Net для возврата данных JSON клиенту.
public class Handler: IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//because we're coming into a URL that isn't being handled by DNN we need to figure out the PortalId
SetPortalId(context.Request);
HttpResponse response = context.Response;
response.ContentType = "application/json";
string localPath = context.Request.Url.LocalPath;
if (localPath.Contains("/svc/time"))
{
response.Write(JsonConvert.SerializeObject(DateTime.Now));
}
}
public bool IsReusable
{
get { return true; }
}
///<summary>
/// Set the portalid, taking the current request and locating which portal is being called based on this request.
/// </summary>
/// <param name="request">request</param>
private void SetPortalId(HttpRequest request)
{
string domainName = DotNetNuke.Common.Globals.GetDomainName(request, true);
string portalAlias = domainName.Substring(0, domainName.IndexOf("/svc"));
PortalAliasInfo pai = PortalSettings.GetPortalAliasInfo(portalAlias);
if (pai != null)
{
PortalId = pai.PortalID;
}
}
protected int PortalId { get; set; }
}
Вызов Http: // mydnnsite/SVC/время правильно обрабатывается и возвращает JSON, содержащий текущее время.
Должен ли я получить точки StackOverflow для этого? ;) –
@ Крис Хаммонд, вы получаете довольно большое спасибо, так как у вас достаточно очков, как есть. – tatigo
хех в то время, когда у меня их было не так много: D –