繁体   English   中英

api控制器发布方法返回404-找不到

[英]Api controller post method returns 404 - not found

我的Web api中有这些控制器方法,它们都接受HttpPost。 Process()方法在主体中接收复杂类型参数。 Install方法在主体中接收一个字符串参数。 Process方法已成功调用,但是Install方法失败,并显示错误404-未找到,我认为路由失败,但是我无法弄清楚我在做什么错...

        [HttpPost]
        [ResponseType(typeof(IProcessableObject))]
        [Route("Workflow/Process")]
        public IHttpActionResult Process([FromBody]SerializedObject request)
        {
            try
            {
                Type objectType = ResolveType(request.ObjectType);
                IProcessableObject obj = (IProcessableObject)JsonSerializer.Deserialize(request.RawObject, objectType);
                log.DebugFormat("Processing {0} with workflow {1}", objectType.Name, obj.WorkflowId);
                var workflow = workflowController.Get(obj.WorkflowId, true);
                var workflowProcessor = new WorkflowProcessor(obj, workflow);
                if (workflowProcessor.Process())
                    return Ok(obj);
                return InternalServerError();
            }
            catch (Exception ex)
            {
                log.Error(string.Format("Failed processing object {0}", request.ObjectType), ex);
                return InternalServerError();
            }
        }

        [HttpPost]
        [ResponseType(typeof(int))]
        [Route("Workflow/Install/{userName}")]
        public IHttpActionResult Install(string userName, [FromBody]string xmlTemplate)
        {
            try
            {
                log.DebugFormat("User {0} is installing new workflow:{1}{2}", userName, Environment.NewLine, xmlTemplate);
                var wf = workflowController.Install(xmlTemplate, userName);
                if (wf == null)
                    return BadRequest();
                return Ok(wf.WorkflowId);
            }
            catch (Exception ex)
            {
                log.Error("Failed installing workflow", ex);
                return InternalServerError();
            }
        }

从我的MVC应用程序中,我这样称呼他们:

        public static IProcessableObject Process(IProcessableObject obj, bool isProxy = false)
        {

            string requestURL = string.Concat(wfServiceUrl, "Workflow/Process");
            var requestData = new SerializedObject
            {
                RawObject = JsonSerializer.Serialize(obj),
                ObjectType = isProxy ? obj.GetType().BaseType.AssemblyQualifiedName : obj.GetType().AssemblyQualifiedName
            };

            using (var client = new WebClient())
            {
                client.Headers[HttpRequestHeader.ContentType] = "application/json";

                var result = client.UploadString(requestURL, JsonSerializer.Serialize(requestData));
                return (IProcessableObject)JsonSerializer.Deserialize(result, isProxy ? obj.GetType().BaseType : obj.GetType());
            }
        }

        public static int Install(string workflowTemplate, string userName)
        {
            string requestURL = string.Concat(wfServiceUrl, "Workflow/Install/", userName);


            using (var client = new WebClient())
            {
                client.Headers[HttpRequestHeader.ContentType] = "application/json";

                var result = client.UploadString(requestURL, JsonSerializer.Serialize(workflowTemplate));
                return JsonSerializer.Deserialize<int>(result);
            }
        }



public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

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

            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        }
    }

尝试更改此:

〔路线( “工作流/安装/ {用户名}”)]

为了这:

〔路线( “API /工作流/安装/ {用户名}”)]

并对其他路由执行相同操作,添加api / ,这应该可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM