本文整理汇总了C#中IOwinContext.Output方法的典型用法代码示例。如果您正苦于以下问题:C# IOwinContext.Output方法的具体用法?C# IOwinContext.Output怎么用?C# IOwinContext.Output使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IOwinContext
的用法示例。
在下文中一共展示了IOwinContext.Output方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Invoke
public override Task Invoke(IOwinContext context)
{
var req = context.Request;
var rep = context.Response;
var nodePath = GetNodePath(req.Path.Value);
if (!string.IsNullOrEmpty(nodePath))
{
var currentNode = NodeManager.Instance.GetNode(nodePath);
var nodeMethod = currentNode?.GetMethod(req.Method);
if (nodeMethod == null)
return Next.Invoke(context);
Object data = null;
try
{
//调用方法处理
if (NodeManager.Instance.MethodInvokeHandler != null)
nodeMethod = NodeManager.Instance.MethodInvokeHandler.Invoke(nodeMethod, context);
//调用
data = nodeMethod?.Invoke(context);
//返回值处理
if (NodeManager.Instance.ReturnValueHandler != null)
data = NodeManager.Instance.ReturnValueHandler.Invoke(nodeMethod, data);
}
catch (NodeMethodException ex)
{
data = ApiResult.Error(ex.HResult, ex.Message, ex.MethodData);
}
catch (AppDomainUnloadedException ex)
when (ex.InnerException is NodeMethodHandledException)
{
return Task.Delay(0);
}
catch (Exception ex)
{
if (NodeManager.Instance.ExceptionHandler == null)
throw ex;
data = NodeManager.Instance.ExceptionHandler.Invoke(ex);
}
//要输出的内容
string result = null;
//JSON序列化的结果
var json = JsonConvert.SerializeObject(data, NodeManager.Instance.JsonSerializerSettings);
var jsonpCallback = req.Query[JSONP_CALLBACK];
if (string.IsNullOrEmpty(jsonpCallback))
{
rep.ContentType = "text/json; charset=UTF-8";
result = json;
}
else
{
rep.ContentType = "application/x-javascript";
result = $"{jsonpCallback}({json})";
}
rep.Expires = new DateTimeOffset(DateTime.Now);
return context.Output(encoding.GetBytes(result), true);
}
return Next.Invoke(context);
}
示例2: handleResource
private Task handleResource(IOwinContext context, Stream stream, ResourceWebResponse resourceResponse, double expires)
{
var req = context.Request;
var rep = context.Response;
//验证缓存有效
{
//===================
//先验证最后修改时间
//===================
var resourceLastModified = resourceResponse.LastModified;
//最后修改时间判断部分
var clientLastModified = req.Headers.Get("If-Modified-Since");
if (clientLastModified != null)
{
if (clientLastModified == resourceLastModified.ToString("R"))
{
rep.StatusCode = 304;
return Task.Run(() => stream.Dispose());
}
}
//===================
//然后验证ETag
//===================
//ETag设置判断部分
String serverETag = null;
if (UseMd5ETag)
serverETag = HashUtils.ComputeETagByMd5(stream);
else
serverETag = resourceResponse.LastModified.Ticks.ToString();
var clientETag = req.Headers.Get("If-None-Match");
//如果客户端的ETag值与服务端相同,则返回304,表示资源未修改
if (serverETag == clientETag)
{
rep.StatusCode = 304;
return Task.Run(() => stream.Dispose());
}
rep.ETag = serverETag;
stream.Position = 0;
}
rep.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(expires));
rep.Headers["Cache-Control"] = $"max-age={expires}";
rep.Headers["Last-Modified"] = resourceResponse.LastModified.ToUniversalTime().ToString("R");
return context.Output(stream, true, EnableCompress, resourceResponse.Uri.LocalPath);
}