【问题标题】:How to create a dymanic function in ASP.NET MVC with Web API and EF如何使用 Web API 和 EF 在 ASP.NET MVC 中创建动态函数
【发布时间】:2015-05-14 06:44:19
【问题描述】:

对不起,我的英文不是很好,所以我会尝试用代码告诉大家我需要什么。在格式情况下,当我有2个模型时,我将创建2个控制器**(例如:用户/产品)** ,如下

var serializer = new JavaScriptSerializer();
var users= new users() { id = 1};
var jsonText = serializer.Serialize(users);
var client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:65370/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
StringContent content = new StringContent(jsonText, Encoding.UTF8, "application/json");

/////////////

var a = client.PostAsync("api/users", users, new JsonMediaTypeFormatter()).Result; (client)  
var b = client.PostAsync("api/product", product, new JsonMediaTypeFormatter()).Result; (client)  

然后当创建用户和产品控制器时,邮政编码应该如下所示

public IHttpActionResult Postusers(users aa) {} (服务器)
public IHttpActionResult Postproduct(product bb) {} (server)

我只想为上面创建 1 个控制器,如下所示

var b = client.PostAsync<users/product>("api/all", product, new JsonMediaTypeFormatter()).Result;(client)

public IHttpActionResult Post<T>(Object ForAll) where T : new() {} (server)

我该如何构建这个结构,请帮我解决这个严肃的问题,谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework generics asp.net-web-api


    【解决方案1】:

    你可以有一个像这样的通用基础控制器:

    public abstract class BaseController<T> : ApiController
        where T : class
    {
        public virtual IHttpActionResult Post(T obj)
        {
            // ......
        }
    
        // some other common methods
    }
    

    然后您为每个实体从该控制器继承:

    public class UsersController : BaseController<User>
    {}
    
    public class ProductsController : BaseController<Product>
    {}
    

    这样你可以保持你的约定,所以"api/users""api/products" 路由将起作用,并且公共代码被重构为一个通用方法。

    【讨论】:

    • 嗨威廉,非常感谢您的帮助,这是一个很好的方法,但是,对于您在 Controller 上的代码,它是 ***.cs 中的一个控制器,或 2 个控制器,PS I希望只需要 1 个控制器来处理所有控制器,这是否可能?再次感谢
    • 对不起威廉,我的意思是我可以为所有人设置一个 ***控制器,如果我有 100 个控制器,我必须在 *.cs 中编写 100 个函数。谢谢
    • 如果你只想要一个控制器,你可以使用一些路由约定并使用反射来激活控制器,但这会更复杂。
    • 再次感谢,您有什么参考资料或信息可以给我研究吗,如果您介意的话,我希望我能做到。
    • 您可以有一个控制器,它将资源名称作为字符串,因此当您调用/api/users 时,它会接收users 作为字符串,然后(使用反射)获取类型User然后使用User 激活通用控制器(再次使用反射)
    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多