我试图在我的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
我最近被问到一个难以理解的问题.
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)怎么办?这两个线程决不会相互干扰.在这种情况下,理想的情况是两个线程并行交换引擎.同步该方法可以防止这种情况发生.
是否有另一种技术以线程安全的方式交换这些引擎,同时仍然利用并行性?
编辑:制作方法公开.
我有以下所有其他活动扩展的类.这是一些伪代码:
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)