MvcController または Razor ビューを使用できないと述べたので、金属に近づくことができます: IHttpHandler
。
だから、1つ書くことから始めます:
public class MyHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var response = context.Response;
response.ContentType = "text/javascript";
var message = "This is some super dynamic message. The UTC time now is: " + DateTime.UtcNow.ToLongTimeString();
var js = string.Format("alert({0});", new JavaScriptSerializer().Serialize(message));
response.Write(js);
}
public bool IsReusable
{
get { return true; }
}
}
次に、対応するルート ハンドラを記述します。
public class MyHandlerProvider: IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MyHandler();
}
}
そしてApplication_Start
、ルートを追加します:
protected void Application_Start()
{
RouteTable.Routes.Add(
new Route(
"eventAggregation/events",
new MyHandlerProvider()
)
);
}
また、ルートを手動で追加したくない場合は、Application_Start
を使用できますWebActivator
。単純に静的 Startup クラスを記述します。
internal static class Startup
{
public static void Application_Start()
{
RouteTable.Routes.Add(
new Route(
"eventAggregation/events",
new MyHandlerProvider()
)
);
}
}
次に、アセンブリ全体の属性を使用します。
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MvcApplication1.Startup), "Application_Start")]
ビューに残っているのは、それを参照することだけです。
<script type="text/javascript" src="~/eventAggregation/events"></script>