DotNetNuke 6은 모듈이 aspx 페이지가 아닌 사용자 정의 컨트롤로 개발되어 WebMethods를 지원하지 않는 것으로 보입니다.DNN 6 모듈 - 비동기 호출 활용 방법
JSN을 DNN 사용자 모듈에서 해당 모듈이 들어있는 페이지로 라우팅, 호출 및 반환하는 권장 방법은 무엇입니까?
DotNetNuke 6은 모듈이 aspx 페이지가 아닌 사용자 정의 컨트롤로 개발되어 WebMethods를 지원하지 않는 것으로 보입니다.DNN 6 모듈 - 비동기 호출 활용 방법
JSN을 DNN 사용자 모듈에서 해당 모듈이 들어있는 페이지로 라우팅, 호출 및 반환하는 권장 방법은 무엇입니까?
이 문제를 해결하는 가장 좋은 방법은 맞춤 Httphandlers입니다. 베이스 라인에 Chris Hammonds Article에있는 예제를 사용했습니다.
<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>
핸들러 자체는 매우 간단합니다
일반적인 생각
는 사용자 지정 HTTP 처리기를 만들 필요가있다. 요청 URL과 매개 변수를 사용하여 필요한 로직을 추론합니다. 이 경우 JSON 데이터를 클라이언트에 반환하는 데 Json.Net을 사용했습니다.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은 현재 시간을 포함 반환합니다.
다른 사람이이 모듈을 통해 세션 상태에 액세스하거나 사용자 정보를 업데이트하는 문제가 있습니까? 요청/응답 작업을 가지고 있고 DNN 인터페이스에 액세스 할 수 있지만 현재 사용자를 얻으려고하면 null이 반환됩니다. 따라서 액세스 역할을 확인할 수 없게됩니다.
//Always returns an element with null parameters; not giving current user
var currentUser = UserController.Instance.GetCurrentUserInfo();
이 문제에 대한 StackOverflow 점수를 얻습니까? ;) –
@Chris Hammond, 당신은 충분한 점수를 얻은 이후로 꽤 고맙습니다. – tatigo
그 당시 많은 사람들이 없었습니다. D –