Return json 作为 Umbraco 的默认值 API 控制器

Return json as default from Umbraco API Controller

正如标题所说,我想 return json 作为默认值而不是 XML。在普通 Web API 中,我可以编辑 App_Start/WebApiConfig.cs 并添加以下行,但我找不到在 Umbraco 中编辑配置的位置。

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

我不希望我的方法 return JsonResult 实现这一点。

您可以像这样创建自定义 global.asax.cs:

using System;
using System.Net.Http.Headers;
using System.Web.Http;
using Umbraco.Web;

namespace MyNamespace
{
    public class CustomGlobal : UmbracoApplication
    {
        private void application_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            var formatters = GlobalConfiguration.Configuration.Formatters;
            formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        }
    }
}

然后按如下方式更新您的 global.asax,指向您的 CustomGlobal class

<%@ Application Inherits="MyCustomGlobal" Language="C#" %>

我首先查看了类似的解决方案@sebastiaan,但决定改写 "ApplicationStarting"。

public class CustomApplicationEventHandler : ApplicationEventHandler
{
    protected override void ApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

和 WebApiConfig class:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    }
}

这种方法不好,因为它 returns JSON 的 Content-Typetext/html

在此处查看答案和评论:

更好的解决方案是: