1

我正在尝试从 MVC 的默认成员中删除用户,但传递的参数始终为空。我使用了[HttpDelete]属性,[FromBody]但它给出了"500 Server internal error"。下面是我的代码

    // Delete api/Del/user name

    public HttpResponseMessage DeleteUser(string user)
    {

        try
        {
            System.Web.Security.Membership.DeleteUser(user);
        }
        catch (Exception)
        {

            return Request.CreateResponse(HttpStatusCode.NotFound);
        }


        return Request.CreateResponse(HttpStatusCode.OK);
    }

这是我使用“删除”动词的调用方法。

http://localhost:3325/api/Del/haris2

我已经为路由创建了这个 webapi 类。我在同一个控制器中有一个没有参数的 Get 方法。它的工作很好。

WebApiConfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;

namespace DatabaseService_WebAPI.App_Start
{
    public class WebApiConfig
    {
        public static void Configure(HttpConfiguration config)
        {
            // Filters
            config.Filters.Add(new QueryableAttribute());


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

        }
    }
}
4

1 回答 1

2

问题是 MVC按名称映射您的参数。所以有两种方法可以解决你的问题

  1. 将您的操作参数的名称更改为id您的映射路径所期望的名称,例如

    public ActionResult DeleteUser(string id)
    {
        ...
    }
    
  2. 更新您的路线以查找user参数而不是 id,例如

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{user}",
        defaults: new { user = RouteParameter.Optional }
    );
    
于 2012-11-09T12:20:26.283 回答