From b70e4e646f913a2a7baede7c91ee229bc036cd90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 28 Apr 2018 15:17:20 +0300 Subject: [PATCH] Added MimeTypes and AbpHttpRequestExtensions.CanAccept --- .../ExceptionHandling/AbpExceptionFilter.cs | 4 +- .../Http/AbpHttpRequestExtensions.cs | 31 +++++++ .../AspNetCore/Http/HttpRequestExtensions.cs | 22 ----- src/Volo.Abp.Http/Volo/Abp/Http/MimeTypes.cs | 87 +++++++++++++++++++ 4 files changed, 120 insertions(+), 24 deletions(-) create mode 100644 src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Http/AbpHttpRequestExtensions.cs delete mode 100644 src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Http/HttpRequestExtensions.cs create mode 100644 src/Volo.Abp.Http/Volo/Abp/Http/MimeTypes.cs diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs index bbcbef6bc1..bd87bae55e 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs @@ -47,8 +47,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling return true; } - - if (context.HttpContext.Request.Headers["Accept"].ToString().Contains("application/json")) //TODO: Optimize? + + if (context.HttpContext.Request.CanAccept(MimeTypes.Application.Json)) { return true; } diff --git a/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Http/AbpHttpRequestExtensions.cs b/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Http/AbpHttpRequestExtensions.cs new file mode 100644 index 0000000000..4ccfdd23c1 --- /dev/null +++ b/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Http/AbpHttpRequestExtensions.cs @@ -0,0 +1,31 @@ +using JetBrains.Annotations; +using Volo.Abp; + +namespace Microsoft.AspNetCore.Http +{ + public static class AbpHttpRequestExtensions + { + private const string RequestedWithHeader = "X-Requested-With"; + private const string XmlHttpRequest = "XMLHttpRequest"; + + public static bool IsAjax([NotNull]this HttpRequest request) + { + Check.NotNull(request, nameof(request)); + + if (request.Headers == null) + { + return false; + } + + return request.Headers[RequestedWithHeader] == XmlHttpRequest; + } + + public static bool CanAccept([NotNull]this HttpRequest request, [NotNull] string contentType) + { + Check.NotNull(request, nameof(request)); + Check.NotNull(contentType, nameof(contentType)); + + return request.Headers["Accept"].ToString().Contains(contentType); + } + } +} diff --git a/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Http/HttpRequestExtensions.cs b/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Http/HttpRequestExtensions.cs deleted file mode 100644 index 46fdd07630..0000000000 --- a/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Http/HttpRequestExtensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Volo.Abp; - -namespace Microsoft.AspNetCore.Http -{ - public static class HttpRequestExtensions - { - private const string RequestedWithHeader = "X-Requested-With"; - private const string XmlHttpRequest = "XMLHttpRequest"; - - public static bool IsAjax(this HttpRequest request) - { - Check.NotNull(request, nameof(request)); - - if (request.Headers == null) - { - return false; - } - - return request.Headers[RequestedWithHeader] == XmlHttpRequest; - } - } -} diff --git a/src/Volo.Abp.Http/Volo/Abp/Http/MimeTypes.cs b/src/Volo.Abp.Http/Volo/Abp/Http/MimeTypes.cs new file mode 100644 index 0000000000..bb58cdaecf --- /dev/null +++ b/src/Volo.Abp.Http/Volo/Abp/Http/MimeTypes.cs @@ -0,0 +1,87 @@ +namespace Volo.Abp.Http +{ + /* Taken from https://gist.github.com/markwhitaker/b29c0142360714688a7cf863ab33e5c9 */ + + public static class MimeTypes + { + public static class Application + { + public const string AtomXml = "application/atom+xml"; + public const string AtomcatXml = "application/atomcat+xml"; + public const string Ecmascript = "application/ecmascript"; + public const string JavaArchive = "application/java-archive"; + public const string Javascript = "application/javascript"; + public const string Json = "application/json"; + public const string Mp4 = "application/mp4"; + public const string OctetStream = "application/octet-stream"; + public const string Pdf = "application/pdf"; + public const string Pkcs10 = "application/pkcs10"; + public const string Pkcs7Mime = "application/pkcs7-mime"; + public const string Pkcs7Signature = "application/pkcs7-signature"; + public const string Pkcs8 = "application/pkcs8"; + public const string Postscript = "application/postscript"; + public const string RdfXml = "application/rdf+xml"; + public const string RssXml = "application/rss+xml"; + public const string Rtf = "application/rtf"; + public const string SmilXml = "application/smil+xml"; + public const string XFontOtf = "application/x-font-otf"; + public const string XFontTtf = "application/x-font-ttf"; + public const string XFontWoff = "application/x-font-woff"; + public const string XPkcs12 = "application/x-pkcs12"; + public const string XShockwaveFlash = "application/x-shockwave-flash"; + public const string XSilverlightApp = "application/x-silverlight-app"; + public const string XhtmlXml = "application/xhtml+xml"; + public const string Xml = "application/xml"; + public const string XmlDtd = "application/xml-dtd"; + public const string XsltXml = "application/xslt+xml"; + public const string Zip = "application/zip"; + } + + public static class Audio + { + public const string Midi = "audio/midi"; + public const string Mp4 = "audio/mp4"; + public const string Mpeg = "audio/mpeg"; + public const string Ogg = "audio/ogg"; + public const string Webm = "audio/webm"; + public const string XAac = "audio/x-aac"; + public const string XAiff = "audio/x-aiff"; + public const string XMpegurl = "audio/x-mpegurl"; + public const string XMsWma = "audio/x-ms-wma"; + public const string XWav = "audio/x-wav"; + } + + public static class Image + { + public const string Bmp = "image/bmp"; + public const string Gif = "image/gif"; + public const string Jpeg = "image/jpeg"; + public const string Png = "image/png"; + public const string SvgXml = "image/svg+xml"; + public const string Tiff = "image/tiff"; + public const string Webp = "image/webp"; + } + + public static class Text + { + public const string Css = "text/css"; + public const string Csv = "text/csv"; + public const string Html = "text/html"; + public const string Plain = "text/plain"; + public const string RichText = "text/richtext"; + public const string Sgml = "text/sgml"; + public const string Yaml = "text/yaml"; + } + + public static class Video + { + public const string Threegpp = "video/3gpp"; + public const string H264 = "video/h264"; + public const string Mp4 = "video/mp4"; + public const string Mpeg = "video/mpeg"; + public const string Ogg = "video/ogg"; + public const string Quicktime = "video/quicktime"; + public const string Webm = "video/webm"; + } + } +}