小编Jer*_*y G的帖子

ASP.Net Web Api - ApiExplorer不包含任何ApiDescriptions

我试图在我的Web服务的控制器中实现一个Options方法,它将返回一个消息,其中包含与控制器关联的URI端点的有效HTTP方法.我的Options方法看起来像这样:

public HttpResponseMessage Options()
{
    var resp = new HttpResponseMessage();
    resp.Content = new StringContent("");

    var apiExplorer = GlobalConfiguration.Configuration.Services
        .GetApiExplorer();

    foreach (ApiDescription api in apiExplorer.ApiDescriptions)
    {
        resp.Content.Headers.Add("Allow", api.HttpMethod.Method);
    }

    return resp;
}
Run Code Online (Sandbox Code Playgroud)

我已经在具有Get,Post和Delete方法的控制器内部的全新Web Api项目(暗示:未改变的路由)中尝试了上述方法.正如所料,返回"允许:GET,POST,DELETE"的响应.但是,我遇到了麻烦,将其添加到我正在处理的更大的项目中.在较大的项目中,ApiExplorer中的ApiDescriptions列表不包含任何元素.为什么是这样?我怀疑这是由于已经实现的自定义路由,尽管怀疑的唯一依据是以下链接:

http://forums.asp.net/t/1821651.aspx/1

有没有其他人经历过这个空的ApiDescription列表?如果是这样,你找到了补救措施吗?

注意:我使用的是MCV 4 RC

c# asp.net asp.net-mvc asp.net-web-api asp.net-mvc-apiexplorer

12
推荐指数
1
解决办法
7836
查看次数

在多线程环境中交换变量

我最近被问到一个难以理解的问题.

public void swapEngine(Car a, Car b) {
  Engine temp = a.engine;
  a.engine = b.engine;
  b.engine = temp;
}
Run Code Online (Sandbox Code Playgroud)

这不是一种线程安全的方法.如果线程1调用swapEngine(car1, car2)然后调用线程2 swapEngine(car1, car3),则可能car2最终得到引擎car3.解决此问题的最明显方法是使用synchronize该方法.

同步该方法引入了潜在的低效率.如果线程1调用swapEngine(car1, car2)和线程2调用swapEngine(car3, car4)怎么办?这两个线程决不会相互干扰.在这种情况下,理想的情况是两个线程并行交换引擎.同步该方法可以防止这种情况发生.

是否有另一种技术以线程安全的方式交换这些引擎,同时仍然利用并行性?

编辑:制作方法公开.

java

12
推荐指数
1
解决办法
564
查看次数

应用设计模式以减少代码重复

我有以下所有其他活动扩展的类.这是一些伪代码:

public class CommonActivity extends Activity
{
    //class member variables

    protected void setupInterface(String activityName)
    {
        //a bunch of setup code here
        Button select = new Button;
        Button create = new Button;
        Button delete = new Button;
    }
    protected void resetScreen()
    {
        selectButton.highlight();
        createButton.unhighlight();
        deleteButton.unhighlight();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有五到六个其他扩展CommonActivity的类,并执行以下操作:

 public class SectionActivity extends CommonActivity
{
    //class member variables

    protected void onCreate()
    {
        setupInterface("sectionActivity");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有另一个从CommonActivity延伸的Activity,它与其他活动略有不同.我发现自己编写了以下代码:

public class ExActivity extends CommonActivity
{
    //class member variables

    protected void onCreate()
    {
        setupInterface2("sectionActivity");
    }
} …
Run Code Online (Sandbox Code Playgroud)

java android design-patterns

2
推荐指数
1
解决办法
955
查看次数