本文整理汇总了C#中MindTouch.Dream.DreamMessage.CheckCacheRevalidation方法的典型用法代码示例。如果您正苦于以下问题:C# DreamMessage.CheckCacheRevalidation方法的具体用法?C# DreamMessage.CheckCacheRevalidation怎么用?C# DreamMessage.CheckCacheRevalidation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MindTouch.Dream.DreamMessage
的用法示例。
在下文中一共展示了DreamMessage.CheckCacheRevalidation方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Invoke
public Yield Invoke(Plug plug, string verb, XUri uri, DreamMessage request, Result<DreamMessage> response)
{
// we only support GET as verb
DreamMessage reply;
if((verb != Verb.GET) && (verb != Verb.HEAD)) {
reply = new DreamMessage(DreamStatus.MethodNotAllowed, null, null);
reply.Headers.Allow = Verb.GET + "," + Verb.HEAD;
} else {
bool head = (verb == Verb.HEAD);
// try to load the assembly
System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(uri.Host);
Version version = assembly.GetName().Version;
DateTime timestamp = new DateTime(2000, 1, 1).AddDays(version.Build).AddSeconds(version.Revision * 2);
// check if request is just about re-validation
if(!head && request.CheckCacheRevalidation(timestamp)) {
reply = DreamMessage.NotModified();
} else {
try {
System.IO.Stream stream = assembly.GetManifestResourceStream(uri.Path.Substring(1));
if(stream != null) {
MimeType mime = MimeType.New(uri.GetParam(DreamOutParam.TYPE, null)) ?? MimeType.BINARY;
reply = new DreamMessage(DreamStatus.Ok, null, mime, stream.Length, head ? System.IO.Stream.Null : stream);
if(head) {
stream.Close();
} else {
reply.SetCacheMustRevalidate(timestamp);
}
} else {
reply = DreamMessage.NotFound("could not find resource");
}
} catch(System.IO.FileNotFoundException) {
reply = DreamMessage.NotFound("could not find resource");
} catch(Exception e) {
reply = DreamMessage.InternalError(e);
}
}
}
response.Return(reply);
yield break;
}
示例2: GetSiteLogo
public Yield GetSiteLogo(DreamContext context, DreamMessage request, Result<DreamMessage> response) {
DreamMessage responseMsg = null;
DateTime modified = DekiContext.Current.Instance.Storage.GetSiteFileTimestamp(LOGO_LABEL);
try {
if(modified != DateTime.MinValue) {
if(request.CheckCacheRevalidation(modified)) {
responseMsg = DreamMessage.NotModified();
}
}
if(responseMsg == null) {
StreamInfo file = DekiContext.Current.Instance.Storage.GetSiteFile(LOGO_LABEL, false);
if(file != null) {
responseMsg = DreamMessage.Ok(MimeType.PNG, file.Length, file.Stream);
//Build the content disposition headers
responseMsg.Headers.ContentDisposition = new ContentDisposition(true, file.Modified ?? DateTime.UtcNow, null, null, "logo.png", file.Length);
//Set caching headers
responseMsg.SetCacheMustRevalidate(modified);
} else {
responseMsg = DreamMessage.NotFound("Logo has not been uploaded");
}
}
} catch {
if(responseMsg != null) {
responseMsg.Close();
}
throw;
}
response.Return(responseMsg);
yield break;
}
示例3: GetFile
public Yield GetFile(DreamContext context, DreamMessage request, Result<DreamMessage> response) {
PageBE parentPage = null;
DreamMessage responseMsg = null;
AttachmentBE fileRevision = GetAttachment(request, Permissions.READ, true, false, out parentPage);
if(fileRevision.IsHidden) {
PermissionsBL.CheckUserAllowed(DekiContext.Current.User, Permissions.ADMIN);
}
// check if only file information is requested
if(context.Verb == Verb.HEAD) {
response.Return(new DreamMessage(DreamStatus.Ok, null, fileRevision.MimeType, (long)fileRevision.Size, Stream.Null));
yield break;
}
try {
if(request.CheckCacheRevalidation(fileRevision.Timestamp)) {
responseMsg = DreamMessage.NotModified();
}
if (responseMsg == null) {
#region Preview related parameter parsing
string sFormat = context.GetParam("format", string.Empty);
string sRatio = context.GetParam("ratio", string.Empty);
uint height = context.GetParam<uint>("height", 0);
uint width = context.GetParam<uint>("width", 0);
string cachedSize = context.GetParam("size", string.Empty);
// check 'ratio' parameter
RatioType ratio = RatioType.UNDEFINED;
if (!string.IsNullOrEmpty(sRatio)) {
switch (sRatio.ToLowerInvariant().Trim()) {
case "var":
case "variable":
ratio = RatioType.VARIABLE;
break;
case "fixed":
ratio = RatioType.FIXED;
break;
default:
throw new DreamBadRequestException(DekiResources.INVALID_FILE_RATIO);
}
}
// check 'size' parameter
SizeType size = SizeType.UNDEFINED;
if (!string.IsNullOrEmpty(cachedSize) && !SysUtil.TryParseEnum(cachedSize.Trim(), out size)) {
throw new DreamAbortException(DreamMessage.BadRequest(DekiResources.INVALID_FILE_SIZE));
}
// check 'format' parameter
FormatType format = FormatType.UNDEFINED;
if(!string.IsNullOrEmpty(sFormat) && !SysUtil.TryParseEnum(sFormat.Trim(), out format)) {
throw new DreamBadRequestException(DekiResources.INVALID_FILE_FORMAT);
}
#endregion
//if any preview related parameters are set, do preview logic. Otherwise return the file
StreamInfo file = null;
if((size != SizeType.UNDEFINED && size != SizeType.ORIGINAL) ||
ratio != RatioType.UNDEFINED ||
format != FormatType.UNDEFINED ||
height != 0 ||
width != 0
) {
file = AttachmentPreviewBL.RetrievePreview(fileRevision, height, width, ratio, size, format);
} else {
file = DekiContext.Current.Instance.Storage.GetFile(fileRevision, SizeType.ORIGINAL, true);
}
// prepare response
if(file == null) {
throw new DreamInternalErrorException(string.Format(DekiResources.COULD_NOT_RETRIEVE_FILE, fileRevision.ResourceId, fileRevision.Revision));
}
if(file.Uri != null) {
responseMsg = DreamMessage.Redirect(file.Uri);
} else {
bool inline = fileRevision.ImageHeight.HasValue;
// see if we can use the MimeType map for allowing inlining
if(!inline) {
// if IE inline security is not disabled
bool isIE = false;
if(!DekiContext.Current.Instance.EnableUnsafeIEContentInlining) {
// check the user agent to see if we're dealing with IE
isIE = MSIE_USER_AGENT_REGEX.IsMatch(request.Headers.UserAgent ?? string.Empty);
}
// see if the mime-type could allow inlining
inline = DekiContext.Current.Instance.MimeTypeCanBeInlined(fileRevision.MimeType);
if(inline && isIE) {
// check whether the creator of the file had unsafecontent permission, to override IE security
IList<AttachmentBE> revisions = AttachmentBL.Instance.GetResourceRevisions(fileRevision.ResourceId, ResourceBE.ChangeOperations.CONTENT, SortDirection.DESC, 1);
UserBE lastContentEditor = UserBL.GetUserById(revisions[0].UserId);
inline = PermissionsBL.IsUserAllowed(lastContentEditor, parentPage, Permissions.UNSAFECONTENT);
}
}
//.........这里部分代码省略.........