首页 > 其他分享 >webapi路由

webapi路由

时间:2024-04-18 16:23:46浏览次数:26  
标签:webapi string ApiResult param id error public 路由

ShopController.cs

public class ShopController : ApiControllerBase
    {
        [Route("api/v1/shop/watermark")]
        [HttpPost]
        public ApiResult watermark(dynamic value)
        {
            // watermark/shopname.txt
            ApiResult parseParam = Parse<WatermarkParam>(value);
            if (!string.IsNullOrEmpty(parseParam.error))
                return parseParam;
            var request_id = parseParam.request_id;

            try
            {
                var param = (WatermarkParam)parseParam.response;
                string fileName=GetUploadPath($@"watermark\{param.watermarkfilename}");
                FileHelper.CheckDirectory(fileName);
                //var bitmap = ImageTool.Base64StringToImage(param.watermarkbase64);
                //ImageTool.WriteImage(bitmap, fileName);
                byte[] buffer=Convert.FromBase64String(param.watermarkbase64);
                ImageTool.WriteFile(buffer, fileName);
                var ack1 = ApiResult.New("", "", request_id, "");
                return ack1;
            }
            catch (Exception ex)
            {
                return ApiResult.New("error", ex.ToString(), request_id, "");
            }

        }

        class WatermarkParam : ApiParamBase
        {
            public string watermarkfilename;
            public string watermarkbase64;
        }
    }
View Code

 

ApiControllerBase.cs

 

    public class ApiControllerBase : ApiController
    {
        public const string SecretKey = "1z56'uTU;L.XWtPrkYfn>CRJ2BAV7<$dy!Go=:h+j*cNl~@}{,";
        public ApiResult Parse<T>(object value) where T : ApiParamBase, new()
        {
            try
            {
                var json = JsonConvert.SerializeObject(value);
                T param = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json);
                string sign = EncryptTool.md5($"{param.timestamp}{SecretKey}");
                if (sign != param.sign)
                {
                    return ApiResult.New("sign_error", "sign_error", ApiResult.NewGuid(), "");
                }
                return ApiResult.New("", "", ApiResult.NewGuid(), param);
            }
            catch (Exception ex)
            {
                return ApiResult.New("param_error", "param_error", ApiResult.NewGuid(), "");
            }

        }

        public string ToJson(object obj)
        {
            string json = JsonConvert.SerializeObject(obj);
            return json;
        }

        public string GetUploadPath(string path)
        {
            var savepath = System.Configuration.ConfigurationManager.AppSettings["savepath"];
            var fileName = Path.Combine(savepath, path);
            return fileName;
        }
    }
View Code

 

ApiParamBase.cs

    public class ApiParamBase
    {
        public ulong timestamp;
        public string sign;
    }
View Code

ApiResult.cs

 

public class ApiResult
    {
        public static string NewGuid()
        {
            return Guid.NewGuid().ToString();
        }
        public static ApiResult New(string error, string message, string request_id, object response)
        {
            var ret = new ApiResult(error, message, request_id, response);
            return ret;
        }

        public ApiResult(string error, string message, string request_id, object response)
        {
            this.error = error;
            this.message = message;
            this.request_id = request_id;
            this.response = response;
        }

        /// <summary>
        /// 对应错误编码
        /// </summary>
        public string error { get; set; }
        /// <summary>
        /// 错误详细信息
        /// </summary>
        public string message { get; set; }
        /// <summary>
        /// 请求ID,用GUID去掉-表示
        /// </summary>
        public string request_id { get; set; }

        /// <summary>
        /// 响应内容
        /// </summary>
        public object response { get; set; }



    }
View Code

 

 

 

参考:

http://www.wisestudy.cn/article/webapi_post_put_delete.html

https://zhuanlan.zhihu.com/p/31279568?utm_id=0

https://blog.csdn.net/u013934107/article/details/136104537

https://blog.csdn.net/zgscwxd/article/details/133823295

https://blog.csdn.net/m0_46635910/article/details/128322556

https://blog.csdn.net/qq_43544461/article/details/130762168

https://www.cnblogs.com/landeanfen/p/5337072.html#_label1_0

 

标签:webapi,string,ApiResult,param,id,error,public,路由
From: https://www.cnblogs.com/zhaotiantian/p/18143740

相关文章

  • 在Linux中,如何使用MTR进行网络诊断和路由跟踪?
    mtr(MyTraceroute)是一个结合了traceroute和ping功能的网络诊断工具。它可以显示到目的主机的数据包传输路径,并持续监测每个路径点的丢包率和延迟。以下是使用mtr进行网络诊断和路由跟踪的详细步骤:1.安装mtr首先,你需要确保你的Linux系统上已经安装了mtr。你可以使用包管理器来......
  • NGINX Ingress Controller 设置未配置过的域名增加默认路由
    背景k8s集群对应的公网slbip经常被人绑定域名,监控侧经常会收集到502相关状态码的异常告警,着手处理这种badcase策略1.所有没有在ingress配置过的域名要进行处理,即不是公司的、非法绑定到slb上的域名要加上一条策略2.NGINXIngressController设置未配置过的域名......
  • 跨网段通信实战(支持静态路由表的家用路由)
    具体情况如下:光猫:拨号上网和分配ip,4个lan口相当于最顶层的入户设备,192.168.1.0/24接光猫的路由器A:WAN口192.168.1.18,LAN口192.168.0.0/24接光猫的路由器B:WAN口192.168.1.19,LAN口192.168.6.0/24接路由器A的路由器C:连接在路由器A的LAN口下,DHCP池为192.168.2.0/24接路由器C的......
  • Yii2-url路由配置
    Yii2-url路由配置没做任何处理的情况下,url地址如下http://www.yii2-basic.com/index.php?r=site/about去掉index.php和开启url美化/web/目录下添加.htaccess文件RewriteEngineon#如果是一个目录或者文件,就访问目录或文件RewriteCond%{REQUEST_FILENAME}!-d......
  • 一文读懂.NET WebAPI中FromRoute、FromQuery、FromBody的关键角色与用法
    .NETWebAPI作为一种构建RESTful服务的强大工具,为开发者提供了便捷的方式来定义、处理HTTP请求并返回响应。在设计API接口时,正确地接收和解析客户端发送的数据至关重要。.NETWebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用于指示控制器方法应如何从不同的请求......
  • 03 Vue3路由
    Vue3的路由与Vue2相似,关于Vue2的路由器相关可以参考Vue2vue-router下面是一些补充路由器工作模式history模式优点:URL更加美观,不带有#,更接近传统的网站URL。缺点:后期项目上线,需要服务端配合处理路径问题,否则刷新会有404错误。constrouter=createRouter({ history:c......
  • 18、BGP分层路由
    BGP分层路由定义BGP分层路由是指将一台设备上BGP路由分成基础路由和分层路由。部署BGP分层路由功能可为数据中心网络的故障场景提供更快的路由收敛速度,特别是在分层路由数量远大于基础路由的场景中能够达到较好的收敛效果。为了能够实现BGP分层路由收敛功能,新增了一种分层收......
  • 04、IS-IS路由渗透
    IS-IS路由渗透通常情况下,Level-1区域内的路由通过Level-1路由器进行管理。所有的Level-2和Level-1-2路由器构成一个连续的骨干区域。Level-1区域必须且只能与骨干区域相连,不同的Level-1区域之间并不相连。Level-1-2路由器将学习到的Level-1路由信息装进Level-2LSP,再泛洪LSP给......
  • vue3中动态添加路由刷新无法正确匹配路由组件
    1.问题动态添加路由之后,页面重新匹配路由,匹配到了设置的404notfound页面该页面是在路径无法匹配到的时候才会跳转的页面2.问题查找在前置路由守卫打印to发现当前地址匹配到的组件是配置的404页面并且此时的动态路由中是含有改路由地址的3.问题原因在页面刷新时......
  • ABP -Vnext框架一步一步入门落地教程——使用ABP -Vnext创建一个WEBAPI接口(二)
    人生需要指引,而复制是成功最快的方式,兄弟们让我们发车吧————代码大牛ljy开发主题:何谓开发应用服务端在官方开发教程这一段的内容叫做开发应用服务端,作为现在前后端分离的开发模式来说,一个应用就分为前端页面框架和后端API,页面框架调用WEBAPI实现业务就完事了。所以咱们今天......