You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.6 KiB
52 lines
1.6 KiB
using System; |
|
using System.IO; |
|
using System.Net; |
|
using System.Threading.Tasks; |
|
using DotXxlJob.Core; |
|
using Microsoft.AspNetCore.Http; |
|
using Microsoft.Extensions.DependencyInjection; |
|
|
|
namespace ASPNetCoreExecutor |
|
{ |
|
public class XxlJobExecutorMiddleware |
|
{ |
|
private readonly IServiceProvider _provider; |
|
private readonly RequestDelegate _next; |
|
|
|
private readonly XxlRpcServiceHandler _rpcService; |
|
public XxlJobExecutorMiddleware(IServiceProvider provider, RequestDelegate next) |
|
{ |
|
_provider = provider; |
|
_next = next; |
|
|
|
_rpcService = _provider.GetRequiredService<XxlRpcServiceHandler>(); |
|
} |
|
|
|
|
|
public async Task Invoke(HttpContext context) |
|
{ |
|
|
|
if ("POST".Equals(context.Request.Method, StringComparison.OrdinalIgnoreCase) && |
|
"application/octet-stream".Equals(context.Request.ContentType, StringComparison.OrdinalIgnoreCase)) |
|
{ |
|
/* |
|
using (Stream file = File.Create("./"+DateTime.Now.ToUnixTimeSeconds()+".data")) |
|
{ |
|
context.Request.Body.CopyTo(file); |
|
} |
|
|
|
return; |
|
*/ |
|
|
|
var rsp = await _rpcService.HandlerAsync(context.Request.Body); |
|
|
|
context.Response.StatusCode = (int) HttpStatusCode.OK; |
|
context.Response.ContentType = "text/plain;utf-8"; |
|
await context.Response.Body.WriteAsync(rsp,0,rsp.Length); |
|
return; |
|
} |
|
|
|
await _next.Invoke(context); |
|
} |
|
} |
|
} |