ZhiYeJianKang_PeiXun/PeiXun.Controllers/GlobalController.cs
2025-02-20 15:41:53 +08:00

126 lines
4.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Taurus.Mvc;
using System.Web;
using Taurus.Plugin.Limit;
using Taurus.Plugin.MicroService;
using Newtonsoft.Json;
using System.Dynamic;
using System;
using CYQ.Data.Cache;
namespace Taurus.Controllers
{
/// <summary>
/// 全局控制器(适全全局事件处理)
/// </summary>
public partial class GlobalController : Taurus.Mvc.Controller
{
/// <summary>
/// 所有寻址不到的请求都集中执行到此方法。
/// </summary>
public override void Default()
{
Response.StatusCode = 404;
Write("404 - by GlobalController.Default()");
}
/// <summary>
/// 用于所有的请求合法性验证,配合[Ack]属性
/// 启用时:局部的先执行(若存在),无局部才执行全局。
/// </summary>
public static bool CheckAck(Controller controller, string ack)
{
//需要自己实现Ack验证
return AckLimit.IsValid(ack);
}
/// <summary>
/// 用于需要登陆后的身份验证,配合[Token]属性
/// 启用时:局部的先执行(若存在),无局部才执行全局。
/// </summary>
//public static bool CheckToken(Controller controller, string token)
//{
// //需要自己实现或者通过配置Taurus.Auth启动自带的验证自带的注释掉此方法即可
// return !string.IsNullOrEmpty(token);
//}
public static bool CheckToken(Controller controller, string methodName)
{
//controller.CheckFormat("token Can't be Empty", "token");
////实现Token验证
////controller.Write(methodName + " NoToken");
//return true;
DistributedCache cache = DistributedCache.Instance;
//cache.Set("xxxx","12345678",1);
string token = controller.Query<string>("token");
bool result = false;
if (!string.IsNullOrEmpty(token))
{
result = token.ToUpper().StartsWith("XYL:");
string tokenX = "";
if (result)
{
tokenX = token.Substring(4);
}
if (cache.Get(tokenX) == null)
{
controller.Write("token 无效!", false);
return false;
}
//else
//controller.Write(cache.Get<string>(tokenX));
}
if (!result)
{
controller.Write("can't find token!", false);
}
return result;
}
/// <summary>
/// 用于校验微服务的内部身份验证,配合[MicroService]属性
/// 启用时:全局仅此一个生效,局部的失效。
/// </summary>
public static bool CheckMicroService(Controller controller, string serverKey)
{
return MsConfig.Server.RcKey == serverKey;
}
/// <summary>
/// 全局【路由映射】
/// 启用时:所有请求都进入此地做映射。
/// </summary>
public static string RouteMapInvoke(HttpRequest request)
{
//if (request.Url.LocalPath.StartsWith("/api/") && RouteConfig.RouteMode == 2)
//{
// return "/test" + request.RawUrl;
//}
return string.Empty;
}
/// <summary>
/// 全局【方法执行前拦截】
/// 启用时:先全局,再执行局部(若存在)。
/// </summary>
public static bool BeforeInvoke(Controller controller)
{
//if (controller.ControllerName == "doc")
//{
// controller.SetQuery("msg", "初始msg参数值。");
//}
return true;
}
/// <summary>
/// 全局【方法执行后业务】
/// 启用时:先执行局部(若存在),再执行全局。
/// </summary>
public static void EndInvoke(Controller controller)
{
//Console.WriteLine(Environment.NewLine + "---------Call..【"+ methodName + "】 RemoteIP : " + controller.Request.UserHostAddress + "-----------");
}
}
}