2012-11-09 112 views
1

我想从MVC的默认成员身份中删除用户,但传递参数始终为空。我用[HttpDelete]属性和[FromBody],但它给出“500服务器内部错误”。以下是我的代码传递参数为空

// 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 } 
      ); 

     } 
    } 
} 
+0

有可能是一个问题与你的路由,您可以为您的路由配置? – Mightymuke

+0

我编辑了我的代码。 – Haris

+0

你肯定需要'Delete'方法顶部的'[HttpDelete]'属性(不知道为什么添加它会引发服务器错误)。你真的使用'DELETE'作为动词吗? – James

回答

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 } 
    ); 
    
+0

Thx很多,它的工作原理。 – Haris