mvc4 webapi里一个controller对应多个post方法

            //config.Routes.MapHttpRoute(
            //    name: "DefaultApi",
            //    routeTemplate: "api/{controller}/{id}",
            //    defaults: new { id = RouteParameter.Optional }
            //);

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
    public class UserLoginController : BaseApiController
    {
        // POST api/UserLogin/ApiToken
        [HttpPost]
        [AllowAnonymous]
        [ActionName("ApiToken")]
        public ApiTokenResponeModel ApiToken(ApiTokenRequestModel model)
        {
            var respone = new ApiTokenResponeModel();
            try
            {
                // 请求头校验
                respone.issuccess = SignHelper.Check(Request.Headers);

                // 登录校验
                var appKey = Request.Headers.GetValues("appKey").First();
                respone.registered = Registered(model, appKey);

                // 生成jwt
                if(respone.registered) respone.access_token = TokenHelper.GenerateToken(model.businesslicenseNo, 5);
            }
            catch (ShowInfoException e)
            {
                respone = new ApiTokenResponeModel() { msg = e.Message };
            }
            catch (Exception ex)
            {
                respone = new ApiTokenResponeModel() { msg = "服务器异常,请联系中智客服" };
                BusinessEngine.Logger.Error(ex);
            }
            return respone;
        }

        // POST api/UserLogin/Register
        [HttpPost]
        [AllowAnonymous]
        [ActionName("Register")]
        public RegisterResponeModel Register(RegisterRequestModel model)
        {
            var respone = new RegisterResponeModel();
            try
            {
                // 请求头校验
                SignHelper.Check(Request.Headers);

                // 注册
                var appKey = Request.Headers.GetValues("appKey").First();
                Register(model, appKey);

                // 生成jwt
                respone.access_token = TokenHelper.GenerateToken(model.businesslicenseNo, 5);

                respone.issuccess = true;
            }
            catch (ShowInfoException e)
            {
                respone.msg = e.Message;
            }
            catch (Exception ex)
            {
                respone.msg = "服务器异常,请联系中智客服";
                BusinessEngine.Logger.Error(ex);
            }
            return respone;
        }

        /// <summary>
        /// 是否注册
        /// </summary>
        /// <param name="model"></param>
        /// <param name="appKey"></param>
        /// <returns></returns>
        private bool Registered(ApiTokenRequestModel model, string appKey)
        {
            var paramData = new BaseReqParam();
            paramData.ExtraData.Add("AppKey", appKey);
            paramData.ExtraData.Add("BusinesslicenseNo", model.businesslicenseNo);
            var resp = ServiceCommunicator.AnonymousExecuteOperation<BaseResponse>("PotentialCustomer.Registered", paramData);
            return resp.ExtraData.GetBool("Registered");
        }

        /// <summary>
        /// 注册
        /// </summary>
        /// <returns></returns>
        private bool Register(RegisterRequestModel model, string appKey)
        {
            var paramData = new BaseReqParam();
            paramData.ExtraData.Add("AppKey", appKey);
            paramData.ExtraData.Add("BusinesslicenseNo", model.businesslicenseNo);
            paramData.ExtraData.Add("CompanyName", model.company);
            paramData.ExtraData.Add("Nature", model.nature);
            paramData.ExtraData.Add("Industry", model.industry);
            paramData.ExtraData.Add("Linkman", model.linkman);
            paramData.ExtraData.Add("Phone", model.phone);
            paramData.ExtraData.Add("Email", model.email);

            var resp = ServiceCommunicator.AnonymousExecuteOperation<BaseResponse>("PotentialCustomer.Register", paramData);
            return resp.ExtraData.GetBool("Registered");
        }
    }
View Code

此处的疑问是为什么api/{controller}/{id}不注释掉,即使名称name不都是DefaultApi的,也会报500服务器错误。

如果两种路由都要用的话,怎么办?

posted @ 2022-03-17 20:03  江境纣州  阅读(140)  评论(0编辑  收藏  举报