Last active
August 29, 2015 14:07
-
-
Save nakamura-to/b3e8c82141193bce54af to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using MvcApplication3.Controllers; | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using System.Web; | |
| using System.Web.Http; | |
| using System.Web.Mvc; | |
| using System.Web.Optimization; | |
| using System.Web.Routing; | |
| namespace MvcApplication3 | |
| { | |
| // メモ: IIS6 または IIS7 のクラシック モードの詳細については、 | |
| // http://go.microsoft.com/?LinkId=9394801 を参照してください | |
| public class MvcApplication : System.Web.HttpApplication | |
| { | |
| protected void Application_Start() | |
| { | |
| AreaRegistration.RegisterAllAreas(); | |
| WebApiConfig.Register(GlobalConfiguration.Configuration); | |
| FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); | |
| RouteConfig.RegisterRoutes(RouteTable.Routes); | |
| BundleConfig.RegisterBundles(BundleTable.Bundles); | |
| AuthConfig.RegisterAuth(); | |
| ValueProviderFactories.Factories.Remove(ValueProviderFactories.Factories.OfType<JsonValueProviderFactory>().FirstOrDefault()); | |
| ValueProviderFactories.Factories.Add(new JsonDotNetValueProviderFactory()); | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using Newtonsoft.Json; | |
| using Newtonsoft.Json.Converters; | |
| using Newtonsoft.Json.Serialization; | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Dynamic; | |
| using System.Globalization; | |
| using System.Linq; | |
| using System.Web; | |
| using System.Web.Mvc; | |
| namespace MvcApplication3.Controllers | |
| { | |
| public class MyController : Controller | |
| { | |
| protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior) | |
| { | |
| return new JsonDotNetResult | |
| { | |
| Data = data, | |
| ContentType = contentType, | |
| ContentEncoding = contentEncoding, | |
| JsonRequestBehavior = JsonRequestBehavior.AllowGet | |
| }; | |
| } | |
| } | |
| // see http://stackoverflow.com/a/17245644 | |
| public class JsonDotNetResult : JsonResult | |
| { | |
| private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings | |
| { | |
| ContractResolver = new CamelCasePropertyNamesContractResolver(), | |
| Converters = new List<JsonConverter> { new StringEnumConverter() } | |
| }; | |
| public override void ExecuteResult(ControllerContext context) | |
| { | |
| if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && | |
| string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) | |
| { | |
| throw new InvalidOperationException("GET request not allowed"); | |
| } | |
| var response = context.HttpContext.Response; | |
| response.ContentType = !string.IsNullOrEmpty(this.ContentType) ? this.ContentType : "application/json"; | |
| if (this.ContentEncoding != null) | |
| { | |
| response.ContentEncoding = this.ContentEncoding; | |
| } | |
| if (this.Data == null) | |
| { | |
| return; | |
| } | |
| response.Write(JsonConvert.SerializeObject(this.Data, Settings)); | |
| } | |
| } | |
| // see http://www.dalsoft.co.uk/blog/index.php/2012/01/10/asp-net-mvc-3-improved-jsonvalueproviderfactory-using-json-net/ | |
| public sealed class JsonDotNetValueProviderFactory : ValueProviderFactory | |
| { | |
| public override System.Web.Mvc.IValueProvider GetValueProvider(ControllerContext controllerContext) | |
| { | |
| if (controllerContext == null) | |
| throw new ArgumentNullException("controllerContext"); | |
| if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase)) | |
| return null; | |
| string bodyText = null; | |
| using (var reader = new System.IO.StreamReader(controllerContext.HttpContext.Request.InputStream)) | |
| { | |
| bodyText = reader.ReadToEnd(); | |
| } | |
| return String.IsNullOrEmpty(bodyText) ? null : new DictionaryValueProvider<object>(JsonConvert.DeserializeObject<ExpandoObject>(bodyText, new ExpandoObjectConverter()), CultureInfo.CurrentCulture); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment