【问题标题】:ASP.NET Syntax and conventionsASP.NET 语法和约定
【发布时间】:2015-08-21 01:41:15
【问题描述】:

我正在阅读 Designing Evolvable Web APIs with ASP.NET。在其中一个练习中,本书让我使用 Visual Studio 编辑控制器。这是在 ASP.NET 中使用 C# 完成的。我使用的模板是标准的 ASP.NET Web 应用程序 API。

我已将控制器编辑为书中显示的方式(尽管它似乎没有给出非常具体的指示)。这是我的控制器的样子。

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

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OAuth;
using WebApplication4.Models;
using WebApplication4.Providers;
using WebApplication4.Results;

namespace WebApplication4.Controllers
{
    public class GreetingController : ApiController
    {
           public string GetGreeting() {
            return "Hello World!";
            }

    }
    public static List<Greeting> _greetings = new List<Greeting>();
    public HttpResponseMessage PostGreeting(Greeting greeting)
    {
        _greetings.Add(greeting);
        var greetingLocation = new Uri(this.Request.RequestUri, "greeting/" + greeting.Name);
        var response = this.Request.CreateResponse(HttpStatusCodeResult.Created);
        response.Headers.Location = greetingLocation;
        return response;

    }
}

我收到错误:

  • _greetings:命名空间不能直接包含字段或方法等成员
  • PostGreeting:命名空间不能直接包含字段或方法等成员,
  • _greetings : 在当前上下文中不存在
  • 请求:&lt;invalid-global-code&gt; 不包含“请求”的定义,
  • 已创建:HttpStatusCodeREsult 不包含“已创建”的定义

【问题讨论】:

  • 请注意,您的代码不是线程安全的,并且不适用于并发请求。
  • 旁注:在遇到类似问题之前,以其他人的身份搜索错误消息通常是个好主意。通常,带有错位大括号/逗号的帖子将作为“印刷错误”关闭,但如果您不喜欢这样,它可以作为许多“命名空间不能直接包含...”帖子之一的副本关闭,例如stackoverflow.com/questions/9383791/…。跨度>
  • @AlexeiLevenkov 我不认为这是印刷错误,因为我不清楚为什么需要移动支架。从下面的答案中,我看到 _greetings 应该是 greetingController 类的一部分,但我不明白类和列表(或它之后的代码)之间发生的关系。

标签: c# asp.net


【解决方案1】:

正如错误试图告诉您的那样,您的字段和方法必须类中。
检查你的牙套。

【讨论】:

  • +1 不小心删除了一个花括号,花了一些时间才弄清楚实际问题是什么。
【解决方案2】:

你的 _greetings 字段需要是类的一部分,还有 PostGreeting 方法,看来你刚刚关闭了类的“}”有点早。 将 _greetings 字段前的“}”移动到文件末尾,例如:

namespace WebApplication4.Controllers
{
    public class GreetingController : ApiController
    {
           public string GetGreeting() {
            return "Hello World!";
            }

    public static List<Greeting> _greetings = new List<Greeting>();
    public HttpResponseMessage PostGreeting(Greeting greeting)
    {
        _greetings.Add(greeting);
        var greetingLocation = new Uri(this.Request.RequestUri, "greeting/" + greeting.Name);
        var response = this.Request.CreateResponse(HttpStatusCodeResult.Created);
        response.Headers.Location = greetingLocation;
        return response;

    }
}  
}

【讨论】:

  • Agular Mares 进行建议的更改后,除一个错误外,所有错误均已清除。我现在只有一个 Created 错误:HttpStatusCodeREsult 不包含“Created”的定义。附带说明一下,为什么我的 _greetings 字段需要成为课程的一部分?
  • 我认为代码不正确,我猜你的意思是:HttpStatusCode.Created。至于为什么 _greetings 需要成为一部分,基本上命名空间中不能存储任何状态/数据,它们实际上只是类型的“别名/后缀名/容器-ishs”,所以你不能有状态/变量/字段在那个级别。
猜你喜欢
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
相关资源
最近更新 更多