2025-03-28 09:49:56 +08:00

120 lines
3.9 KiB
C#

using System;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Results;
using EShang.Common.Model;
using HZQR.Common;
using Newtonsoft.Json;
namespace EShangApiMain.Controllers
{
/// <summary>
/// 基础接口
/// </summary>
public class BaseController : ApiController
{
/// <summary>
/// 事务管理器
/// </summary>
public SuperMap.RealEstate.ServiceModel.Transaction transaction = new SuperMap.RealEstate.ServiceModel.Transaction();
/// <summary>
/// 重写返回方法(用于释放事物)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="content"></param>
/// <returns></returns>
protected override OkNegotiatedContentResult<T> Ok<T>(T content)
{
if (transaction.IsOpen)
{
transaction.Commit();
}
transaction.Release();
transaction.Dispose();
return base.Ok(content);
}
/// <summary>
/// 获取int类型的header参数
/// </summary>
/// <param name="name">参数名称</param>
/// <param name="value">参数值</param>
/// <returns></returns>
public int? GetIntHeader(string name, int? value)
{
//从header获取ProvinceCode的值
if (value == null && Request.Headers.Contains(name))
{
string[] Headervalue = (string[])Request.Headers.GetValues(name);
if (Headervalue.Length > 0 && Headervalue[0].ToString() != "")
{
value = Headervalue[0].TryParseToInt();
}
}
return value;
}
/// <summary>
/// 获取string类型的header参数
/// </summary>
/// <param name="name">参数名称</param>
/// <param name="value">参数值</param>
/// <returns></returns>
public string GetStringHeader(string name, string value)
{
//从header获取ProvinceCode的值
if (string.IsNullOrWhiteSpace(value) && Request.Headers.Contains(name))
{
string[] Headervalue = (string[])Request.Headers.GetValues(name);
if (Headervalue.Length > 0 && Headervalue[0].ToString() != "")
{
value = Headervalue[0];
}
}
return value;
}
/// <summary>
/// 获取请求头对象
/// </summary>
/// <returns></returns>
protected HeaderModel GetHeaderModel()
{
var header = new HeaderModel
{
Userpattern = GetIntHeader("Userpattern", null),
Serverpartcodes = GetStringHeader("Serverpartcodes", ""),
Provincecode = GetStringHeader("Provincecode", ""),
Serverpartshopids = GetStringHeader("Serverpartshopids", ""),
Token = JsonConvert.DeserializeObject<AccessToken>(GetStringHeader("Token", "").ToDecrypt())
};
if (!header.Userpattern.HasValue)
{
throw new Exception("数据模式不能为空");
}
if (header.Token == null)
{
throw new Exception("Token不能为空");
}
if (!header.Token.UserID.HasValue)
{
throw new Exception("Token中缺少用户信息");
}
return header;
}
/// <summary>
/// 接口请求用户信息
/// </summary>
/// <returns></returns>
protected AccessToken GetAccessToken()
{
var token = GetStringHeader("Token", "");
var userInfo = JsonConvert.DeserializeObject<AccessToken>(token.ToDecrypt());//已解码,直接返回用户信息
return userInfo == null ? new AccessToken() : userInfo;
}
}
}